docker快速入門01
docker快速入門02
KVM和Docker的對(duì)比
docker常用命令
systemctl start docker ---啟動(dòng)容器服務(wù)
systemctl enable docker ---容器服務(wù)開機(jī)自啟
docker version ---查看docker的版本
ctrl pq ---靜悄悄的離開容器(容器不停)
docker run -d -p 80:80 nginx ---啟動(dòng)帶nginx鏡像的容器
run ---創(chuàng)建并運(yùn)行一個(gè)容器
-d ---放在后臺(tái)
-p ---指定端口映射(訪問外網(wǎng))
-P ---隨機(jī)分配端口
nginx ---docker鏡像的名字
docker search ---搜索鏡像
docker pull ---從配置的鏡像網(wǎng)站拉取鏡像
docker image ls ---查看擁有的鏡像
docker images ---查看擁有的鏡像
docker image save -o docker_busybox1.29.tar.gz busybox:1.29 ---把鏡像導(dǎo)到當(dāng)前目錄下并取名加版本號(hào)加文件后綴
docker image rm busybox:1.29 ---刪除鏡像(加具體版本否則刪最新)
docker image load -i docker_busybox1.29.tar.gz ---導(dǎo)入鏡像
docker image build ---制作鏡像
docker image history ---查看鏡像制作的歷史
docker run -it --name centos:6.9 /bin/bash ---運(yùn)行并進(jìn)入一個(gè)容器并指定名稱分配容器的初始命令
-it ---分配交互式終端
--name ---指定容器的名字
/bin/bash ---覆蓋容器的初始命令
docker container ls -a ---查看所有容器的狀態(tài)(不加-a查看運(yùn)行中的容器)
docker start 容器名字或ID ---啟動(dòng)容器
docker stop 容器名字或ID ---停止容器
docker kill 容器名字或ID ---殺掉容器
docker container ls -a -l ---只顯示最近的一個(gè)容器
docker container rm ---刪除一個(gè)容器
docker stop $(docker ps -a -q) ---批量刪除未運(yùn)行的容器
docker ps -a ---顯示所有容器(包括未運(yùn)行的)
docker ps -a -q ---只顯示所有容器的ID
docker exec -it 容器名字或ID /bin/bash ---進(jìn)入一個(gè)容器
docker commit 容器ID 新鏡像名稱 ---手動(dòng)制作容器
docker image build -t centos6.9_nginx:v2 /opt/dockerfile/nginx ---自動(dòng)構(gòu)建鏡像命令(在當(dāng)前目錄下可用 . 表示)
-t ---給鏡像創(chuàng)建名稱
docker run -it --workdir /tmp centos6.9 ---指定容器工作目錄
docker inspect ---查看(容器师脂、鏡像乡数、卷)屬性
什么是容器晚唇?
容器就是在隔離的環(huán)境運(yùn)行的一個(gè)進(jìn)程,如果進(jìn)程停止杨何,容器就會(huì)銷毀酱塔。隔離的環(huán)境擁有自己的系統(tǒng)文件,ip地址危虱,主機(jī)名等
kvm虛擬機(jī)羊娃,linux,系統(tǒng)文件
程序:代碼埃跷,命令
進(jìn)程:正在運(yùn)行的程序
容器和虛擬化的區(qū)別
linux容器技術(shù)蕊玷,容器虛擬化和kvm虛擬化的區(qū)別
kvm虛擬化: 需要硬件的支持,需要模擬硬件弥雹,可以運(yùn)行不同的操作系統(tǒng)垃帅,啟動(dòng)時(shí)間分鐘級(jí)(開機(jī)啟動(dòng)流程)
#linux開機(jī)啟動(dòng)流程:
bios開機(jī)硬件自檢
根據(jù)bios設(shè)置的優(yōu)先啟動(dòng)項(xiàng)boot 網(wǎng)卡 硬盤 u盤 光驅(qū)
讀取mbr引導(dǎo) 2T UEFI(gpt分區(qū)) mbr硬盤分區(qū)信息,內(nèi)核加載路徑,
加載內(nèi)核
啟動(dòng)第一個(gè)進(jìn)程/sbin/init systemd
系統(tǒng)初始化完成
運(yùn)行服務(wù)(nginx剪勿,httpd贸诚,mysql)
#容器啟動(dòng)流程:
共用宿主機(jī)內(nèi)核:
第一個(gè)進(jìn)程直接啟動(dòng)服務(wù)(nginx,httpd厕吉,mysql)
容器和虛擬機(jī)的區(qū)別:
容器:共用宿主機(jī)內(nèi)核酱固,輕量級(jí),損耗少头朱,啟動(dòng)快运悲,性能高,只能運(yùn)行在linux系統(tǒng)上
虛擬機(jī):需要硬件的支持项钮,需要模擬硬件班眯,需要走開機(jī)啟動(dòng)流程希停,可以運(yùn)行不同的操作系統(tǒng)
容器是linux內(nèi)核獨(dú)有的技術(shù)
性能好,速度快鳖敷,損耗少 脖苏,秒級(jí)啟動(dòng),只能在linux上運(yùn)行
容器技術(shù)的發(fā)展過程:
chroot技術(shù)
參考資料:https://www.ibm.com/developerworks/cn/linux/l-cn-chroot/
練習(xí)1:使用chroot監(jiān)獄限制SSH用戶訪問指定目錄和使用指定命令(cp,ls)
https://linux.cn/article-8313-1.html
ls
docker安裝
Docker提供了兩個(gè)版本:社區(qū)版(CE)和企業(yè)版(EE)定踱。
操作系統(tǒng)要求
以Centos7為例,且Docker要求操作系統(tǒng)必須為64位恃鞋,且centos內(nèi)核版本為3.1及以上崖媚。
查看系統(tǒng)內(nèi)核版本信息:
uname -r
?
0 準(zhǔn)備
卸載舊版本:
yum remove docker docker-common docker-selinux docker-engine
?yum remove docker-ce
?
卸載后將保留/var/lib/docker的內(nèi)容(鏡像、容器恤浪、存儲(chǔ)卷和網(wǎng)絡(luò)等)畅哑。
rm -rf /var/lib/docker
?
安裝依賴軟件包
yum install -y yum-utils device-mapper-persistent-data lvm2
?
# 安裝前可查看device-mapper-persistent-data 和 lvm2 是否已經(jīng)安裝
rpm -qa | grep device-mapper-persistent-data
rpm -qa | grep lvm2
?
?
安裝Base源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
?
下載docker源
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
?
把docker官網(wǎng)地址改為清華源
sed -i 's#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo
?
更新yum軟件包索引
yum makecache fast
?
二、安裝
安裝最新版本docker-ce
yum install docker-ce -y
?
#安裝指定版本docker-ce可使用以下命令查看
yum list docker-ce.x86_64 --showduplicates | sort -r
?
# 安裝完成之后可以使用命令查看
docker version
在docker上裝一個(gè)nginx
wget http://192.168.37.202/linux59/docker_nginx1.15.tar.gz
ls
docker load -i docker_nginx1.15.tar.gz
docker run -d -p 80:80 nginx
docker run -d -p 80:80 nginx
run(創(chuàng)建并運(yùn)行一個(gè)容器)
-d 放在后臺(tái)
-p 端口映射
nginx docker鏡像的名字
docker的鏡像管理
配置鏡像加速
這里使用阿里云的免費(fèi)鏡像加速服務(wù)水由,也可以使用其他如時(shí)速云荠呐、網(wǎng)易云等。
注冊(cè)登錄開通阿里云容器鏡像服務(wù)
查看控制臺(tái)砂客,找到鏡像加速器并復(fù)制自己的加速器地址
加入以下配置
# 填寫自己的加速器地址
{
"registry-mirrors": ["https://6kx4zyno.mirror.aliyuncs.com"]
}
?
docker倉(cāng)庫(kù)加速如下:
找到/etc/docker目錄下的daemon.json文件泥张,沒有則創(chuàng)建/etc/docker目錄后直接vi daemon.json編輯
vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
?或者阿里云docker加速
{
"registry-mirrors":["https://6kx4zyno.mirror.aliyuncs.com"]
}
經(jīng)過多次測(cè)試,發(fā)現(xiàn)還是阿里云的好用鞠值,所以強(qiáng)烈推薦這款
通知systemd重載此配置文件
systemctl daemon-reload
?
重啟docker服務(wù)
systemctl restart docker
搜索鏡像:
docker search
[root@docker01 ~]# docker search centos
[root@docker01 ~]# docker search nginx
官方docker鏡像下載地址
hub.docker.com
拉取鏡像
獲取鏡像
? docker pull(push)
[root@docker01 ~]# docker pull busybox
[root@docker01 ~]# docker pull busybox:1.29
查看鏡像
[root@docker01 ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest 19485c79a9bb 9 hours ago 1.22MB
busybox 1.29 758ec7f3a1ee 8 months ago 1.15MB
nginx latest be1f31be9a87 11 months ago 109MB
刪除鏡像
[root@docker01 ~]# docker image rm busybox:1.29
[root@docker01 ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest 19485c79a9bb 9 hours ago 1.22MB
nginx latest be1f31be9a87 11 months ago 109MB
導(dǎo)出鏡像
[root@docker01 ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest 19485c79a9bb 9 hours ago 1.22MB
busybox 1.29 758ec7f3a1ee 8 months ago 1.15MB
nginx latest be1f31be9a87 11 months ago 109MB
[root@docker01 ~]# docker image save -o docker_busybox1.29.tar.gz busybox:1.29
[root@docker01 ~]# ll
total 205572
-rw-------. 1 root root 1392 Apr 19 12:22 anaconda-ks.cfg
-rw------- 1 root root 1378816 Sep 5 12:08 docker_busybox1.29.tar.gz
導(dǎo)入鏡像
[root@docker01 ~]# docker image load -i docker_busybox1.29.tar.gz
23bc2b70b201: Loading layer 1.37MB/1.37MB
Loaded image: busybox:1.29
[root@docker01 ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest 19485c79a9bb 9 hours ago 1.22MB
busybox 1.29 758ec7f3a1ee 8 months ago 1.15MB
nginx latest be1f31be9a87 11 months ago 109MB
導(dǎo)入需要用到的鏡像
[root@docker01 ~]# ll
-rw-r--r-- 1 root root 5853184 Sep 5 12:15 docker_alpine.tar.gz
-rw-r--r-- 1 root root 1424896 Sep 5 12:15 docker_busybox.tar.gz
-rw-r--r-- 1 root root 202872320 Sep 5 12:16 docker_centos6.9.tar.gz
-rw-r--r-- 1 root root 74210304 Sep 5 12:15 docker_k8s_dns.tar.gz
[root@docker01 ~]# for i in `find /root/* -type f -name "docker*"`;do docker image load -i $i;done
[root@docker01 ~]# docker image ls
docker的容器管理
*** docker run -d -p 80:80 nginx:latest
run(創(chuàng)建并運(yùn)行一個(gè)容器)
-d 放在后臺(tái)
-p 端口映射
-v 源地址(宿主機(jī)):目標(biāo)地址(容器)
?
nginx docker鏡像的名字
?
docker run -it --name centos6 centos:6.9 /bin/bash
-it 分配交互式的終端interactive tty
--name 指定容器的名字
/bin/sh覆蓋容器的初始命令
?
運(yùn)行容器***
docker run image_name
?
docker run ==== docker create + docker start
啟動(dòng)容器
docker start
停止容器
docker stop CONTAINER_ID
殺死容器
docker kill container_name
查看容器列表
docker ps(-a -l -q <--no-trunc 全部顯示>)
?
進(jìn)入正在運(yùn)行的容器(目的媚创,調(diào)試,排錯(cuò))
*** docker exec (會(huì)分配一個(gè)新的終端tty)
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
?
docker exec -it 容器id或容器名字 /bin/bash(/bin/sh)
docker attach(使用同一個(gè)終端) 偷偷離開的快捷鍵ctrl+p,ctrl+q
docker attach [OPTIONS] CONTAINER
nsenter(安裝yum install -y util-linux 棄用)
?
刪除容器
docker container rm <centos6>
批量刪除容器
docker rm -f `docker ps -a -q`
總結(jié):docker容器內(nèi)的第一個(gè)進(jìn)程(初始命令)必須一直處于前臺(tái)運(yùn)行的狀態(tài)(必須夯淄瘛)钞钙,否則這個(gè)容器,就會(huì)處于退出狀態(tài)声离!
業(yè)務(wù)在容器中運(yùn)行:初始命令,夯住芒炼,啟動(dòng)服務(wù)
docker容器的網(wǎng)絡(luò)訪問(端口映射)
docker0:172.17.0.1 jumpserver:172.17.0.2 nginx:172.17.0.3
指定映射(docker 會(huì)自動(dòng)添加一條iptables規(guī)則來實(shí)現(xiàn)端口映射)
? -p hostPort:containerPort
? -p ip:hostPort:containerPort 多個(gè)容器都想使用8080端口
? -p ip::containerPort(隨機(jī)端口)
? -p hostPort:containerPort/udp
? -p 10.0.0.100::53/udp 使用宿主機(jī)的10.0.0.100這個(gè)ip地址的隨機(jī)端口的udp協(xié)議映射容器的udp53端口
? -p 81:80 –p 443:443 可以指定多個(gè)-p
隨機(jī)映射
? docker run -P (隨機(jī)端口)
通過iptables來實(shí)現(xiàn)的端口映射
docker的數(shù)據(jù)卷管理
/usr/share/nginx/html
-v /opt/xiaoniao:/usr/share/nginx/html
持久化
數(shù)據(jù)卷(文件或目錄)
? -v 卷名:/data (第一次卷是空,會(huì)容器的數(shù)據(jù)復(fù)制到卷中,如果卷里面有數(shù)據(jù),把卷數(shù)據(jù)的掛載到容器中)
? -v src(宿主機(jī)的目錄):dst(容器的目錄)
數(shù)據(jù)卷容器
? --volumes-from(跟某一個(gè)已經(jīng)存在的容器掛載相同的卷)
?
小鳥飛飛飛_基礎(chǔ)版練習(xí)
第一種方法:
執(zhí)行下面操作:小游戲的軟件包下載后上傳后將代碼放到容器中
docker run -d -p 80:80 nginx:latest
docker exec -it <ID_當(dāng)前一臺(tái)容器可tab鍵補(bǔ)全名字> /bin/bash
cd /opt/
mkdir xiaoniao
cd xiaoniao/
wget http://192.168.37.202/linux59/xiaoniaofeifei.zip
unzip xiaoniaofeifei.zip
ls
cd ..
docker container cp xiaoniao <容器名字或_ID>:/usr/share/nginx/html
進(jìn)入到nginx容器中查看站點(diǎn)目錄:
docker exec -it <容器名字或_ID> /bin/bash
cd /usr/share/nginx/html/
ls xiaoniao/
第二種方法:
批量刪除掉容器,用容器的數(shù)據(jù)復(fù)制方法把代碼放到容器中:
最后接的是nginx的鏡像术徊,需提前上傳好
docker container rm -f `docker ps -a -q`
docker run -d -p 80:80 -v /opt/xiaoniao:/usr/share/nginx/html nginx:latest
第三種方法
刪除容器本刽,沒有根目錄開始的就代表的是創(chuàng)建一個(gè)卷
[root@docker01 opt]# docker container rm -f `docker ps -a -q`
[root@docker01 opt]# docker run -d -p 80:80 -v xiaoniao:/usr/share/nginx/html nginx:latest
[root@docker01 opt]# docker volume ls #卷的資源查看方式
DRIVER VOLUME NAME
local xiaoniao
查看卷的詳細(xì)信息
[root@docker01 opt]# docker volume inspect xiaoniao
[
{
"CreatedAt": "2019-09-05T20:11:26+08:00", 創(chuàng)建時(shí)間
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/xiaoniao/_data", 掛載點(diǎn)
"Name": "xiaoniao",
"Options": null,
"Scope": "local"
}
]
[root@docker01 opt]# cd /var/lib/docker/volumes/xiaoniao/_data
[root@docker01 _data]# ls
50x.html index.html
[root@docker01 _data]# echo '123456ABCDEFG' >index.html
如果卷里面有數(shù)據(jù),把卷數(shù)據(jù)的掛載到容器中
再次清除容器,并創(chuàng)建新容器
[root@docker01 _data]# ls
50x.html index.html
[root@docker01 _data]# docker container rm -f `docker ps -a -q`
內(nèi)容沒有改變弧关,還是之前的數(shù)據(jù)
修改標(biāo)題名字
小鳥飛飛飛_加強(qiáng)版練習(xí)
基于nginx啟動(dòng)一個(gè)容器盅安,監(jiān)聽80和81,訪問80世囊,出現(xiàn)nginx默認(rèn)歡迎首頁(yè)别瞭,訪問81,出現(xiàn)小鳥株憾。
-p 80:80 -p 81:81 -v xxx:xxx -v xxx:xxxx
基于nginx多端口的多站點(diǎn)蝙寨。
第一種方法:宿主機(jī)上修改
#宿主機(jī)上添加一個(gè)nginx配置文件xiaoniao.conf晒衩,端口為81,站點(diǎn)目錄為/opt
#記得打開nginx配置文件中的 include調(diào)用
#檢查語(yǔ)法后重啟nginx,查看80和81端口是否啟動(dòng)
[root@docker01 conf.d]# cat /etc/nginx/conf.d/xiaoniao.conf
server {
listen 81;
server_name _;
root /opt;
index index.html index.htm;
}
[root@docker01 conf.d]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@docker01 conf.d]# systemctl restart nginx
[root@docker01 conf.d]# netstat -lntup|grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 19770/nginx: master
tcp 0 0 0.0.0.0:81 0.0.0.0:* LISTEN 19770/nginx: master
#刪除舊容器墙歪,殺死當(dāng)前nginx進(jìn)程
#創(chuàng)建新容器听系,將小鳥飛飛飛的nginx配置文件復(fù)制到容器的nginx配置文件下
[root@docker01 opt]# pkill -9 nginx
[root@docker01 opt]# docker container rm -f `docker ps -a -q`
[root@docker01 opt]# docker run -d -p 80:80 -p 81:81 -v /opt/xiaoniao.conf:/etc/nginx/conf.d/xiaoniao.conf -v /opt/xiaoniao:/opt nginx:latest
10.0.0.11:80
10.0.0.11:81
第二種方法:進(jìn)入容器修改
#創(chuàng)建新容器,把代碼復(fù)制到容器中后 進(jìn)入容器
[root@docker01 opt]# docker container rm -f `docker ps -a -q`
[root@docker01 opt]# docker run -d -p 80:80 -p 81:81 -v /opt/xiaoniao:/opt nginx:latest
[root@docker01 opt]# docker exec -it silly_napier /bin/bash
#在容器中生成xiaoniao.conf的nginx配置文件
echo 'server {
listen 81;
server_name _;
root /opt;
index index.html index.htm;
}' >/etc/nginx/conf.d/xiaoniao.conf
root@cde61c762776:/etc/nginx/conf.d# ls
default.conf xiaoniao.conf
#退出容器在宿主機(jī)上重啟nginx容器 瀏覽器訪問查看是否成功
[root@docker01 opt]# docker restart silly_napier
silly_napier
第三種方法:在容器中使用apt-get工具下載vim工具
#刪除舊容器虹菲,創(chuàng)建新的nginx容器,把代碼復(fù)制到容器中靠胜,并進(jìn)入容器
[root@docker01 opt]# docker container rm -f `docker ps -a -q`
[root@docker01 opt]# docker run -d -p 80:80 -p 81:81 -v /opt/xiaoniao:/opt nginx:latest
[root@docker01 opt]# docker exec -it magical_engelbart /bin/bash
root@70e72068d2d0:/#
#查看容器的版本—Debian,和當(dāng)前的源的命令
root@70e72068d2d0:/# cat /etc/os-release
root@70e72068d2d0:/# cat /etc/apt/sources.list
#執(zhí)行下面的命令毕源,優(yōu)化Debian的源
root@70e72068d2d0:/# echo 'deb http://mirrors.ustc.edu.cn/debian/ stretch main non-free contrib
deb http://mirrors.ustc.edu.cn/debian/ stretch-updates main non-free contrib
deb http://mirrors.ustc.edu.cn/debian/ stretch-backports main non-free contrib
deb-src http://mirrors.ustc.edu.cn/debian/ stretch main non-free contrib
deb-src http://mirrors.ustc.edu.cn/debian/ stretch-updates main non-free contrib
deb-src http://mirrors.ustc.edu.cn/debian/ stretch-backports main non-free contrib
deb http://mirrors.ustc.edu.cn/debian-security/ stretch/updates main non-free contrib
deb-src http://mirrors.ustc.edu.cn/debian-security/ stretch/updates main non-free contrib' >/etc/apt/sources.list
#更新緩存
root@70e72068d2d0:/# apt-get update
#使用apt-get下載 vim
root@70e72068d2d0:/# apt-get install vim -y
#添加xiaoniao.conf的配置文件
root@70e72068d2d0:/# vim /etc/nginx/conf.d/xiaoniao.conf
server {
listen 81;
server_name _;
root /opt;
index index.html index.htm;
}
#和之前的步驟相同浪漠,退出容器,在宿主機(jī)上重啟nginx容器
#瀏覽器訪問查看是否成功
[root@docker01 opt]# docker restart silly_napier
silly_napier
apt-get 常用的命令
apt-cache search packagename 搜索包
apt-cache show packagename 獲取包的相關(guān)信息霎褐,如說明址愿、大小、版本等
apt-get install packagename 安裝包
apt-get install packagename --reinstall 重新安裝包
apt-get -f install 修復(fù)安裝”-f = –fix-missing”
apt-get remove packagename 刪除包
apt-get remove packagename --purge 刪除包冻璃,包括刪除配置文件等
apt-get update 更新源
apt-get upgrade 更新已安裝的包
apt-get dist-upgrade 升級(jí)系統(tǒng)
apt-get dselect-upgrade 使用 dselect 升級(jí)
apt-cache depends packagename 了解使用依賴
apt-cache rdepends packagename 是查看該包被哪些包依賴
apt-get build-dep packagename 安裝相關(guān)的編譯環(huán)境
apt-get source packagename 下載該包的源代碼
apt-get clean 清理無用的包
apt-get autoclean 清理無用的包
apt-get check 檢查是否有損壞的依賴
Debian操作系統(tǒng)常用命令
有些需要下載
apt-get install <軟件名> -y
iproute # ip addr
wget # 下載軟件
curl # curl工具
ethtool # 查看網(wǎng)卡狀態(tài)
一响谓、通用命令: 1\. date :print or set the system date and time
2\. stty -a: 可以查看或者打印控制字符(Ctrl-C, Ctrl-D, Ctrl-Z 等)
3\. passwd: print or set the system date and time (用 passwd -h 查看)
4\. logout, login: 登錄 shell 的登錄和注銷命令
5\. pwd: print or set the system date and time
6\. more, less, head tail: 顯示或部分顯示文件內(nèi)容.
7\. lp/lpstat/cancel, lpr/lpq/lprm: 打印文件.
8\. 更改文件權(quán)限: chmod u+x...
9\. 刪除非空目錄:rm -fr dir
10.拷貝目錄: cp -R dir
二、ubuntu 常用命令:
1\. dpkg: package manager for Debian
* 安裝: dpkg -i package
* 卸載: dpkg -r package
* 卸載并刪除配置文件: dpkg -P |--purge package
* 如果安裝一個(gè)包時(shí)省艳。說依賴某些庫(kù)娘纷。可以先 #apt-get install somelib...
* 查看軟件包安裝內(nèi)容 :dpkg -L package
* 另外 dpkg 還有 dselect 和 aptitude 兩個(gè) frontend.
2\. apt
* 安裝: apt-get install packs
* apt-get update : 更新源
* apt-get upgrade: 升級(jí)系統(tǒng)拍埠。
* apt-get dist-upgrade: 智能升級(jí)失驶。安裝新軟件包,刪除廢棄的軟件包
* apt-get -f install : -f == --fix broken 修復(fù)依賴
* apt-get autoremove: 自動(dòng)刪除無用的軟件
* apt-get remove packages :刪除軟件
* apt-get remove package --purge 刪除包并清除配置文件
* 清除所以刪除包的殘余配置文件: dpkg -l |grep ^rc|awk '{print $2}' |tr ["/n"] [" "]|sudo xargs dpkg -P
* 安裝軟件時(shí)候包的臨時(shí)存放目錄 : /var/cache/apt/archives
* 清除該目錄: apt-get clean
* 清除該目錄的舊版本的軟件緩存: apt-get autoclean
* 查詢軟件 some 的依賴包: apt-cache depends some
* 查詢軟件 some 被哪些包依賴: apt-get rdepends some
* 搜索軟件: apt-cache search name|regexp
* 查看一個(gè)軟件的編譯依賴庫(kù): apt-cache showsrc packagename|grep Build-Depends
* 下載軟件的源代碼 : apt-get source packagename (注: sources.list 中應(yīng)該有 deb-src 源)
* 安裝軟件包源碼的同時(shí), 安裝其編譯環(huán)境 :apt-get build-dep packagename (有 deb-src 源)
* 如何將本地光盤加入安裝源列表: apt-cdrom add
3\. 系統(tǒng)命令:
* 查看內(nèi)核版本: uname -a
* 查看 ubuntu 版本: cat /etc/issue * 查看網(wǎng)卡狀態(tài) : ethtool eth0
* 查看內(nèi)存,cpu 的信息: cat /proc/meminfo ; cat /proc/cpuinfo
(/proc 下面的有很多系統(tǒng)信息)
* 打印文件系統(tǒng)空間使用情況: df -h
* 查看硬盤分區(qū)情況: fdisk -l
* 產(chǎn)看文件大小: du -h filename;
* 查看目錄大小: du -hs dirname ; du -h dirname 是查看目錄下所有文件的大小
* 查看內(nèi)存的使用: free -m|-g|-k
* 查看進(jìn)程: ps -e 或 ps -aux -->顯示用戶
* 殺掉進(jìn)程: kill pid
* 強(qiáng)制殺掉: killall -9 processname
4\. 網(wǎng)絡(luò)相關(guān):
* 配置 ADSL: sudo pppoeconf
* ADSL 手工撥號(hào): sudo pon dsl-provider
* 激活 ADSL : sudo /etc/ppp/pppoe_on_boot
* 斷開 ADSL: sudo poff
* 根據(jù) IP 查網(wǎng)卡地址: arping IP 地址
* 產(chǎn)看本地網(wǎng)絡(luò)信息(包括 ip 等): ifconfig | ifconfig eth0
* 查看路由信息: netstat -r
* 關(guān)閉網(wǎng)卡: sudo ifconfig eth0 down
* 啟用網(wǎng)卡: sudo ifconfig eth0 up
* 添加一個(gè)服務(wù): sudo update-rc.d 服務(wù)名 defaults 99
* 刪除一個(gè)服務(wù): sudo update-rc.d 服務(wù)名 remove
* 臨時(shí)重啟一個(gè)服務(wù): /etc/init.d/服務(wù)名 restart
* 臨時(shí)關(guān)閉一個(gè)服務(wù): /etc/init.d/服務(wù)名 stop
* 臨時(shí)啟動(dòng)一個(gè)服務(wù): /etc/init.d/服務(wù)名 start
* 控制臺(tái)下顯示中文: sudo apt-get install zhcon
* 查找某個(gè)文件: whereis filename 或 find 目錄 -name 文件名
*通過 ssh 傳輸文件
scp -rp /path/filename username@remoteIP:/path #將本地文件拷貝到服務(wù)器上
scp -rp username@remoteIP:/path/filename /path #將遠(yuǎn)程文件從服務(wù)器下載到本地
5\. 壓縮:
*解壓縮 a.tar.gz
#tar zxvf a.tar.gz
*解壓縮 a.tar.bz2 #tar jxvf a.tar.bz2
*壓縮 aaa bbb 目錄為 xxx.tar.gz
#tar zcvf xxx.tar.gz aaa bbb
*壓縮 aaa bbb 目錄為 xxx.tar.bz2
#tar jcvf xxx.tar.bz2 aaa bbb
6\. Nautilus:
特殊 URI 地址
* computer:/// - 全部掛載的設(shè)備和網(wǎng)絡(luò)
* network:/// - 瀏覽可用的網(wǎng)絡(luò)
* burn:/// - 一個(gè)刻錄 CDs/DVDs 的數(shù)據(jù)虛擬目錄
* smb:/// - 可用的 windows/samba 網(wǎng)絡(luò)資源
* x-nautilus-desktop:/// - 桌面項(xiàng)目和圖標(biāo)
* file:/// - 本地文件
* trash:/// - 本地回收站目錄
* ftp:// - FTP 文件夾
* ssh:// - SSH 文件夾
* fonts:/// - 字體文件夾枣购,可將字體文件拖到此處以完成安裝
* themes:/// - 系統(tǒng)主題文件夾
* 顯示隱藏文件: Ctrl+h
* 顯示地址欄: Ctrl+l
* 查看已安裝字體: 在 nautilus 的地址欄里輸入”fonts:///“嬉探,就可以查看本機(jī)所有的 fonts`
Vi Etc/network/interfaces · 在 Debian 及其衍生版本中,hostname 都可以通過一下方式修改棉圈。眾所周知涩堤,Linux 的一切都
是存在于文件當(dāng)中的,事實(shí)上 UNIX 是這種哲學(xué)的創(chuàng)立者分瘾。Debian 中 hostname 存在于以下文
件胎围。
/etc/hostname
10.挑戰(zhàn)-搭建Ghost博客系統(tǒng)
資料鏈接
https://iiong.com/gost-blog-install-notes/
https://blog.csdn.net/qq_35974759/article/details/84858358
手動(dòng)將容器保存為鏡像
docker commit 容器id或者容器的名字 新的鏡像名字[:版本號(hào)可選]
1):基于容器制作鏡像
docker run -it centos:6.9
######
yum install httpd
yum install openssh-server
/etc/init.d/sshd start
vi /init.sh
#!/bin/bash
/etc/init.d/httpd start
/usr/sbin/sshd -D
chmod +x /init.sh
2)將容器提交為鏡像
docker commit oldboy centos6-ssh-httpd:v1
3)測(cè)試鏡像功能是否可用
手動(dòng)制作的鏡像,傳輸時(shí)間長(zhǎng)
鏡像初始命令
制作一個(gè)kodexplorer網(wǎng)盤docker鏡像德召。nginx + php-fpm(httpd + php)
手動(dòng)制作容器步驟
手動(dòng)創(chuàng)建一個(gè)centos6的鏡像并創(chuàng)建一臺(tái)容器
#創(chuàng)建一臺(tái)基礎(chǔ)容器白魂,81端口映射到80端口 下載nginx
docker run -it -p 81:80 centos:6.9 /bin/bash
ifconfig
#做端口映射,在容器中下載nginx
echo "192.168.37.202 mirrors.aliyun.com" >>/etc/hosts
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
yum install nginx -y
在宿主機(jī)上手動(dòng)制作鏡像
使用創(chuàng)建的鏡像鏡像創(chuàng)建容器
#查看創(chuàng)建的centos6.9基礎(chǔ)容器的ID
#創(chuàng)建鏡像 centos6.9_nginx v1版本
#刪除當(dāng)前所有容器
#查看宿主機(jī)中的鏡像上岗,是否有剛剛創(chuàng)建的鏡像
#利用新建的鏡像創(chuàng)建容器,將82端口映射到80端口
docker ps -a
docker container commit 84265c434784 centos6.9_nginx:v1
docker container rm -f `docker ps -a -q`
docker image ls
docker run -d -p 82:80 centos6.9_nginx:v1 nginx -g 'daemon off;'
訪問10.0.0.11:82是否成功
容器搭建_掃雷小游戲
tomcat環(huán)境
思路
1:啟動(dòng)centos6 基礎(chǔ)容器
yum install tomcat
2:在容器中書寫腳本文件
vi /init.sh
#!/bin/bash
service tomcat start
tail -f /var/log/tomcat/catalina.out
3:把容器提交為鏡像
docker commit 4a8871d37633 centos6.9_tomcat7:v1
4:啟動(dòng)容器
docker run -d -p 8081:8080 -v /opt/saolei:/var/lib/tomcat/webapps/ROOT centos6.9_tomcat7:v1 /bin/bash /init.sh
具體操作步驟
生產(chǎn)環(huán)境中福荸,一般把源代碼直接封裝到鏡像中,一運(yùn)行容器就可以用肴掷,就不用 < -v > 掛載了
#啟動(dòng)centos6基礎(chǔ)容器敬锐,下載tomcat
docker run -it -p 80:80 centos:6.9 /bin/bash
echo "192.168.37.202 mirrors.aliyun.com" >>/etc/hosts
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
yum install tomcat -y
在容器中書寫腳本
vi /init.sh
#!/bin/bash
service tomcat start
tail -f /var/log/tomcat/catalina.out
#把容器提交為鏡像
docker commit <容器ID> centos6.9_tomcat7:v1
#將掃雷代碼放到/opt目錄下
[root@docker01 ~]# ll /opt/saolei/
total 12
drwxr-xr-x 2 root root 161 Dec 3 2009 imgs
-rw-r--r-- 1 root root 9250 Dec 1 2009 saolei.jsp
#啟動(dòng)容器,為了夯住背传,后面要執(zhí)行之前寫的腳本文件
#如果宿主機(jī)有tomcat的環(huán)境記得修改端口映射或把宿主機(jī)的環(huán)境殺掉
pkill -9 java
docker run -d -p 8080:8080 -v /opt/saolei:/var/lib/tomcat/webapps/ROOT centos6.9_tomcat7:v1 /bin/bash /init.sh
#瀏覽器訪問就可以玩了
容器搭建_可道云
#刪除索引容器
docker container rm -f `docker ps -a -q`
================================================
#新建一個(gè)基礎(chǔ)容器
docker run -it -p 80:80 centos6.9_nginx:v1 /bin/bash
#hosts劫持
echo "192.168.37.202 mirrors.aliyun.com" >>/etc/hosts
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
#安裝php-fpm
yum install -y php-fpm php-gd php-mbstring
#在容器中修改php配置文件
[root@de6c450c9fe9 /]# grep 'nginx' /etc/php-fpm.d/www.conf
user = nginx
group = nginx
#在容器中修改nginx配置文件,設(shè)置站點(diǎn)目錄為 /code
[root@de6c450c9fe9 /]# cat /etc/nginx/nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root /code;
index index.php index.html index.htm;
}
location ~ \.php$ {
root /code;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /code$fastcgi_script_name;
include fastcgi_params;
}
}
}
mkdir /code
#在容器中下載wget和unzip命令用來下載可道云的文件
#可道云的站點(diǎn)包在上面提供的下載路徑可以下載使用
#解壓到站點(diǎn)目錄下后,修改站點(diǎn)目錄的權(quán)限為nginx
yum install -y wget unzip
wget http://192.168.37.202/linux59/kodexplorer4.40.zip
mv kodexplorer4.40.zip code/
cd code/
unzip kodexplorer4.40.zip
chown -R nginx.nginx .
#啟動(dòng)php和nginx
service php-fpm restart
service nginx restart
瀏覽器訪問查看
#把可道云做一個(gè)鏡像
docker commit <容器ID> kod:v1
#新建一個(gè)可道云的容器
docker run -d -p 81:80 kod:v1 service php-fpm nginx start
#登錄方式保證歷史命令存在
docker start <容器ID>
docker attach <容器ID>
#保證容器夯住台夺,在容器中書寫腳本
vi /init.sh
#!/bin/bash
service php-fpm start
nginx -g 'daemon off;'
#將php-fpm和nginx關(guān)閉掉
service php-fpm stop
service nginx stop
#測(cè)試腳本是否可用
sh /init.sh
#再次做鏡像v2
docker commit <容器ID> kod:v2
#利用鏡像v2運(yùn)行一個(gè)新的容器
docker run -d -p 81:80 kod:v2 /bin/bash /init.sh
完成
容器搭建_phpwind論壇
phpwind論壇站點(diǎn)包下載鏈接_提取碼: fw6p
#新建一個(gè)基礎(chǔ)容器径玖,80端口映射,80端口颤介,
#與上一個(gè)項(xiàng)目的可道云的81端口不要沖突
docker run -it -p 80:80 centos6.9_nginx:v1 /bin/bash
#在容器中執(zhí)行梳星,hosts本地劫持
echo "192.168.37.202 mirrors.aliyun.com" >>/etc/hosts
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
#下載php環(huán)境和需要用的的命令
yum install -y wget unzip php-fpm php-gd php-mbstring php-mysql vim
#拉取phpwind論壇的站點(diǎn)包,上面已有下載鏈接
wget http://192.168.37.202/linux59/phpwind_UTF8_8.7.1.zip
#創(chuàng)建站點(diǎn)目錄滚朵,解壓后并修改權(quán)限為nginx
mkdir /code
mv phpwind_UTF8_8.7.1.zip code/
cd /code
unzip phpwind_UTF8_8.7.1.zip
chown -R nginx.nginx .
#修改php-fpm配置文件
[root@2fc2234b814b code]# grep 'nginx' /etc/php-fpm.d/www.conf
user = nginx
group = nginx
#在容器中修改nginx配置文件,設(shè)置站點(diǎn)目錄為 /code/upload
[root@de6c450c9fe9 /]# cat /etc/nginx/nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root /code/upload;
index index.php index.html index.htm;
}
location ~ \.php$ {
root /code/upload;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /code/upload$fastcgi_script_name;
include fastcgi_params;
}
}
}
#啟動(dòng)php-fpm和nginx服務(wù)
service php-fpm restart
service nginx restart
#安裝數(shù)據(jù)庫(kù)并啟動(dòng)
yum install -y mysql-libs mysql-server
service mysqld restart
#進(jìn)入數(shù)據(jù)庫(kù)創(chuàng)庫(kù)丰泊,刪除空表
#為數(shù)據(jù)庫(kù)創(chuàng)建密碼
[root@2fc2234b814b code]# mysqladmin -uroot -p password 123456
[root@2fc2234b814b code]# mysql -uroot -p123456
#刪除空表
mysql> select user,host from mysql.user;
mysql> drop user ''@'2fc2234b814b';
mysql> drop user ''@'localhost';
mysql> flush privileges;
#創(chuàng)建phpwind庫(kù)
mysql> create database phpwind charset utf8;
mysql> show databases;
#調(diào)整時(shí)區(qū)
[root@2fc2234b814b code]# /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
[root@2fc2234b814b code]# date
Fri Sep 6 15:26:33 CST 2019
#重啟服務(wù)
service php-fpm restart
service nginx restart
service mysqld restart
瀏覽器訪問查看
dockerfile自動(dòng)構(gòu)建docker鏡像
類似ansible劇本,大小幾kb
手動(dòng)做鏡像:大小幾百M(fèi)+
dockerfile 支持自定義容器的初始命令
dockerfile主要組成部分:
? 基礎(chǔ)鏡像信息 FROM centos:6.9
? 制作鏡像操作指令 RUN yum install openssh-server -y
? 容器啟動(dòng)時(shí)執(zhí)行初始命令 CMD ["/bin/bash"]
dockerfile常用指令:
FROM 這個(gè)鏡像的媽媽是誰始绍?(指定基礎(chǔ)鏡像)
MAINTAINER 告訴別人,誰負(fù)責(zé)養(yǎng)它话侄?(指定維護(hù)者信息亏推,可以沒有)
LABLE 描述,標(biāo)簽
RUN 你想讓它干啥(在命令前面加上RUN即可)
ADD 給它點(diǎn)創(chuàng)業(yè)資金(會(huì)自動(dòng)解壓tar) 制作docker基礎(chǔ)的系統(tǒng)鏡像
WORKDIR 我是cd,今天剛化了妝(設(shè)置當(dāng)前工作目錄)
VOLUME 給它一個(gè)存放行李的地方(設(shè)置卷年堆,掛載主機(jī)目錄)
EXPOSE 它要打開的門是啥(指定對(duì)外的端口)(-P 隨機(jī)端口)
CMD 奔跑吧吞杭,兄弟!(指定容器啟動(dòng)后的要干的事情)(容易被替換)
dockerfile其他指令:
COPY 復(fù)制文件(不會(huì)解壓)rootfs.tar.gz
ENV 環(huán)境變量
ENTRYPOINT 容器啟動(dòng)后執(zhí)行的命令(無法被替換变丧,啟容器的時(shí)候指定的命令芽狗,會(huì)被當(dāng)成參數(shù))
測(cè)試——FROM & RUN
#手動(dòng)制作一次docker鏡像(收集命令)
#編寫dockerfile文件
[root@docker01 nginx]# mkdir -p /opt/dockerfile/nginx
[root@docker01 nginx]# cd /opt/dockerfile/nginx
[root@docker01 nginx]# vim dockerfile
FROM centos:6.9
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
RUN yum install nginx -y
CMD ["nginx","-g","daemon off;"]
#docker build自動(dòng)構(gòu)建docker鏡像
[root@docker01 nginx]# docker image build -t centos6.9_nginx:v2 --network=host /opt/dockerfile/nginx
.....
Successfully built 05342d047d21
Successfully tagged centos6.9_nginx:v2
#測(cè)試鏡像可不可以使用
docker run -d -p 88:80 centos6.9_nginx:v2
FROM centos:6.9 加載鏡像
RUN 啟動(dòng)一個(gè)臨時(shí)容器, curl產(chǎn)生文件變化痒蓬。保留文件變化童擎,提交為臨時(shí)鏡像,刪除臨時(shí)容器
RUN 啟動(dòng)一個(gè)臨時(shí)容器攻晒,yum install顾复,提交為臨時(shí)鏡像,刪除臨時(shí)容器
dockerfile RUN == docker run
加速的一種方法就是把執(zhí)行的命令放到一行 && \
[root@docker01 nginx]# vim dockerfile
FROM centos:6.9
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo && \
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo && \
yum install nginx php -y
CMD ["nginx","-g","daemon off;"]
測(cè)試——ADD
#創(chuàng)建目錄
cd dockerfile/
mkdir saolei
[root@docker01 saolei]# pwd
/opt/dockerfile/saolei
#添加自動(dòng)創(chuàng)建鏡像的配置文件
[root@docker01 saolei]# vim dockerfile
FROM centos:6.9
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
RUN yum install tomcat -y
RUN cd /var/lib/tomcat/webapps/ && \
curl -o saolei.tar.gz http://192.168.37.202/linux59/saolei.tar.gz && \
tar xf saolei.tar.gz && \
mv saolei ROOT
ADD init.sh /init.sh
CMD ["/bin/bash","/init.sh"]
#添加腳本文件
[root@docker01 saolei]# vim init.sh
#!/bin/bash
service tomcat start
tail -f /var/log/tomcat/catalina.out
#docker build自動(dòng)構(gòu)建docker鏡像
docker build -t centos6.9_tomcat7:v2 --network=host .
#測(cè)試鏡像可不可以使用
docker run -d -p 8080:8080 centos6.9_tomcat7:v2
docker ps -a -l
瀏覽器訪問10.0.0.11:8080
測(cè)試——EXPOSE
#將站點(diǎn)包下載到saolei/下
[root@docker01 saolei]# curl -o saolei.tar.gz http://192.168.37.202/linux59/saolei.tar.gz
[root@docker01 saolei]# vim dockerfile
FROM centos:6.9
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
RUN yum install tomcat -y
RUN cd /var/lib/tomcat/webapps/
ADD saolei.tar.gz .
RUN mv saolei ROOT
ADD init.sh /init.sh
EXPOSE 8080
CMD ["/bin/bash","/init.sh"]
#docker build自動(dòng)構(gòu)建docker鏡像
[root@docker01 saolei]# docker build -t centos6.9_tomcat7:v5 --network=host .
docker常用指令
docker volume ls
docker run -d -p 88:80 --volumes-from 0017aae5b068 kod:v6
docker鏡像的分層(kvm 鏈接克隆鲁捏,寫時(shí)復(fù)制的特性)
鏡像分層的好處:復(fù)用,節(jié)省磁盤空間芯砸,相同的內(nèi)容只需加載一份到內(nèi)存。
修改dockerfile之后给梅,再次構(gòu)建速度快
dockerfile 優(yōu)化:
1:盡可能選擇體積小linux假丧,alpine
2:盡可能合并RUN指令,清理無用的文件(yum緩存动羽,源碼包)
3:修改dockerfile包帚,把變化的內(nèi)容盡可能放在dockerfile結(jié)尾
4: 使用.dockerignore,減少不必要的文件ADD . /html
容器間的互聯(lián)(--link 是單方向的2苤省)
hosts解析
[root@docker01 kod]# docker run -d --name nginx centos6.9_nginx:v1 nginx -g 'daemon off;'
[root@docker01 kod]# docker exec -it nginx /bin/bash
[root@fef3cf194be8 /]# hostname -I
172.17.0.2
[root@docker01 kod]# docker run -it --link nginx:web centos6.9_nginx:v1 /bin/bash
[root@969c228864f2 /]# ping web
PING web (172.17.0.2) 56(84) bytes of data.
64 bytes from web (172.17.0.2): icmp_seq=1 ttl=64 time=0.118 ms
64 bytes from web (172.17.0.2): icmp_seq=2 ttl=64 time=0.120 ms
^C
--- web ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1288ms
rtt min/avg/max/mdev = 0.118/0.119/0.120/0.001 ms
[root@969c228864f2 /]# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 web fef3cf194be8 nginx
docker部署zabbix監(jiān)控
上傳需要的tar包
#上傳后校驗(yàn)md5值
ls *.tar.gz|xargs md5sum
for n in `ls *.tar.gz`;do docker load -i $n ;done
docker run --name mysql-server -it \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
-d mysql:5.7 \
--character-set-server=utf8 --collation-server=utf8_bin
docker run --name zabbix-java-gateway -t \
-d zabbix/zabbix-java-gateway:latest
docker run --name zabbix-server-mysql -t \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
-e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
--link mysql-server:mysql \
--link zabbix-java-gateway:zabbix-java-gateway \
-p 10051:10051 \
-d zabbix/zabbix-server-mysql:latest
docker run --name zabbix-web-nginx-mysql -t \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
--link mysql-server:mysql \
--link zabbix-server-mysql:zabbix-server \
-p 80:80 \
-d zabbix/zabbix-web-nginx-mysql:latest
#zabbix的默認(rèn)監(jiān)控密碼
Admin:zabbix
監(jiān)控服務(wù)
zabbix-agent客戶端軟件包下載鏈接_提取碼: y7ri
開啟另外一臺(tái)docker宿主機(jī) 10.0.0.12
上傳zabbix-agent的軟件包:
[root@docker02 ~]# hostname -I
10.0.0.12 172.17.0.1
[root@docker02 ~]# ls zabbix-agent-3.2.0-1.el7.x86_64.rpm
zabbix-agent-3.2.0-1.el7.x86_64.rpm
安裝zabbix-agent客戶端:
[root@docker02 ~]# rpm -ivh zabbix-agent-3.2.0-1.el7.x86_64.rpm
warning: zabbix-agent-3.2.0-1.el7.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID a14fe591: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:zabbix-agent-3.2.0-1.el7 ################################# [100%]
修改zabbix-agent.conf配置文件中指定的服務(wù)端IP:
[root@docker02 ~]# egrep '^Server' /etc/zabbix/zabbix_agentd.conf
Server=10.0.0.11
ServerActive=127.0.0.1
重啟zabbix-agent服務(wù)
[root@docker02 ~]# systemctl restart zabbix-agent.service
在10.0.0.11 上重啟docker的zabbix服務(wù)端容器婴噩,數(shù)據(jù)能夠加速被監(jiān)控上
[root@docker01 ~]# docker restart zabbix-server-mysql
zabbix-server-mysql
docker registry(私有倉(cāng)庫(kù))
強(qiáng)哥的文檔—docker私有倉(cāng)庫(kù)registry的使用
docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry registry
上傳鏡像到私有倉(cāng)庫(kù):
a:給鏡像打標(biāo)簽
docker tag centos6-sshd:v3 10.0.0.11:5000/centos6-sshd:v3
b:上傳鏡像
docker push 10.0.0.11:5000/centos6-sshd:v3
如果遇到報(bào)錯(cuò):
The push refers to repository [10.0.0.11:5000/centos6.9_ssh]
Get https://10.0.0.11:5000/v2/: http: server gave HTTP response to HTTPS client
解決方法:
vim /etc/docker/daemon.json
{
"insecure-registries": ["10.0.0.11:5000"]
}
systemctl restart docker
普通的registry
在10.0.0.11上導(dǎo)入私有倉(cāng)庫(kù)的配置文件
[root@docker01 opt]# docker load -i registry.tar.gz
[root@docker01 opt]# docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry registry
a958c7b6817dc8d38ba175c12e8a2452668a9b68b1fe9846e46004ee26646608
#上傳鏡像到私有倉(cāng)庫(kù)
[root@docker02 ~]# docker pull daocloud.io/huangzhichong/alpine-cn:latest
[root@docker02 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest be1f31be9a87 11 months ago 109MB
daocloud.io/huangzhichong/alpine-cn latest e8289dcc1d4b 2 years ago 3.98MB
給鏡像打標(biāo)簽:
[root@docker02 ~]# docker tag e8289dcc1d4b 10.0.0.11:5000/alpine:latest
[root@docker02 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest be1f31be9a87 11 months ago 109MB
10.0.0.11:5000/alpine latest e8289dcc1d4b 2 years ago 3.98MB
daocloud.io/huangzhichong/alpine-cn latest e8289dcc1d4b 2 years ago 3.98MB
上傳鏡像:
[root@docker02 ~]# docker push 10.0.0.11:5000/alpine:latest
The push refers to repository [10.0.0.11:5000/alpine]
Get https://10.0.0.11:5000/v2/: dial tcp 10.0.0.11:5000: connect: connection refused
第一次報(bào)錯(cuò)后添加下面的配置:
[root@docker02 ~]# vim /etc/docker/daemon.json
{
"insecure-registries": ["10.0.0.11:5000"]
}
重啟docker
[root@docker02 ~]# systemctl restart docker
再次上傳鏡像成功
[root@docker02 ~]# docker push 10.0.0.11:5000/alpine:latest
The push refers to repository [10.0.0.11:5000/alpine]
78cd8c87ab42: Pushed
60ab55d3379d: Pushed
latest: digest: sha256:d438c876bc7cbfe7732ca1c9a689cc3c24e15f2492ba6270d55f0a8984f96078 size: 735
#再上傳一個(gè)nginx的鏡像
打標(biāo)簽
[root@docker02 ~]# docker tag be1f31be9a87 10.0.0.11:5000/nginx:latest
上傳鏡像
[root@docker02 ~]# docker push 10.0.0.11:5000/nginx
The push refers to repository [10.0.0.11:5000/nginx]
92b86b4e7957: Pushed
94ad191a291b: Pushed
8b15606a9e3e: Pushed
latest: digest: sha256:204a9a8e65061b10b92ad361dd6f406248404fe60efd5d6a8f2595f18bb37aad size: 948
帶basic認(rèn)證的registry
yum install httpd-tools -y
mkdir /opt/registry-var/auth/ -p
htpasswd -Bbn oldboy 123456 >> /opt/registry-var/auth/htpasswd
docker run -d -p 5000:5000 --restart=always -v /opt/registry-var/auth/:/auth/ -v /opt/myregistry:/var/lib/registry -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" registry
#賬號(hào)密碼為oldboy 123456
[root@docker02 ~]# docker login 10.0.0.11:5000
Username: oldboy
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
[root@docker02 ~]# cat /root/.docker/config.json
{
"auths": {
"10.0.0.11:5000": {
"auth": "b2xkYm95OjEyMzQ1Ng=="
}
},
"HttpHeaders": {
"User-Agent": "Docker-Client/19.03.1 (linux)"
}
}[root@docker02 ~]#
刪除倉(cāng)庫(kù)的鏡像
docker-compose(單機(jī)版的容器編排工具)
ansible劇本
yum install -y docker-compose(需要epel源)
cd my_wordpress/
vi docker-compose.yml
version: '3'
?
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
?
wordpress:
depends_on:
- db
image: wordpress:latest
volumes:
- web_data:/var/www/html
ports:
- "80:80"
restart: always
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
volumes:
db_data:
web_data:
啟動(dòng)
docker-compose up
后臺(tái)啟動(dòng)
docker-compose up -d
重啟docker服務(wù)擎场,容器全部退出的解決辦法
方法一:docker run --restart=always
方法二:"live-restore": true
docker server配置文件/etc/docker/daemon.json參考
{
"registry-mirrors": ["http://b7a9017d.m.daocloud.io"],
"insecure-registries":["10.0.0.11:5000"],
"live-restore": true
}
#harbor 企業(yè)級(jí)容器 docker-compose down
Docker Machine安裝docker服務(wù)
Docker Machine 二進(jìn)制 10.0.0.11
10.0.0.12 免密碼登陸 從docker的官網(wǎng)下載二進(jìn)制的包,去安裝docker
10.0.0.13 免密碼登陸
ansible:
shell
Docker網(wǎng)絡(luò)類型(插件形式)
Docker:網(wǎng)絡(luò)模式詳解
Docker網(wǎng)絡(luò)模式測(cè)試
查看容器的詳細(xì)信息(可以查看網(wǎng)絡(luò)類型Networks)
docker container inspect 容器ID
[root@controller ~]# docker network ls
NAME DRIVER SCOPE
bridge bridge local
host host local
none null local
None: | 不為容器配置任何網(wǎng)絡(luò)功能几莽, | --net=none |
Container: | 與另一個(gè)運(yùn)行中的容器共享 | Network Namespace迅办,--net=container:containerID(K8S) |
Host: | 與宿主機(jī)共享 | Network Namespace,--network=host 性能最高 |
Bridge: | Docker設(shè)計(jì)的NAT網(wǎng)絡(luò)模型 默認(rèn)類型 |
[root@docker01 ~]# docker run --help|grep -i '\-n'
--name string Assign a name to the container
--network network Connect a container to a network
--network-alias list Add network-scoped alias for the
--no-healthcheck Disable any container-specified
host(主機(jī))
與宿主機(jī)共用一個(gè)網(wǎng)絡(luò) --network=host`
[root@docker01 ~]# docker run --network=host -d centos6.9_nginx:v2
47fcdc6d02a2fcaf96f94c01dd8c4e30f8d18f4554ecd041a5b92291dee3e72e
[root@docker01 ~]# docker inspect 47fcdc6d02a2 |grep -i network
"NetworkMode": "host",
"NetworkSettings": {
"Networks": {
"NetworkID": "5755f7d4fc1e6e3b78efa629294ddc7f86a93a7d7863e
[root@docker01 /]# netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1/nginx
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp 0 0 :::5000 :::* LISTEN -
tcp 0 0 :::80 :::* LISTEN 1/nginx
tcp 0 0 :::22 :::* LISTEN -
udp 0 0 127.0.0.1:323 0.0.0.0:* -
udp 0 0 ::1:323 :::* -
bridge(橋接式網(wǎng)絡(luò))(默認(rèn))
啟動(dòng)容器時(shí)章蚣,首先會(huì)在主機(jī)上創(chuàng)建一個(gè)docker0的虛擬網(wǎng)橋站欺,相當(dāng)于交換機(jī),同時(shí)自動(dòng)分配一對(duì)網(wǎng)卡設(shè)備纤垂,一半在容器(eth0)矾策,一半在宿主機(jī),并且還關(guān)聯(lián)到了docker0峭沦,從而進(jìn)行連接贾虽。 每創(chuàng)建一個(gè)容器啟動(dòng)時(shí)自動(dòng)分配地址以后會(huì)生成iptables規(guī)則,iptables -t nat -vnL 查看postrouting 吼鱼,從任何接口進(jìn)來,只要不從docker0跳出去蓬豁,源地址任何網(wǎng)絡(luò)地址,無論到達(dá)任何主機(jī)菇肃,都要做地址偽裝地粪,自動(dòng)選擇主機(jī)物理源地址
[root@docker01 ~]# yum install bridge-utils -y
[root@docker01 ~]# docker run --network=bridge -d centos6.9_nginx:v2
[root@docker01 ~]# brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.0242dffbd98d no vetha7e18ee
[root@docker01 ~]# brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.0242dffbd98d no veth4e42c2f
vetha30a6de
Container(K8S會(huì)常用)
與另一個(gè)運(yùn)行得容器共用一個(gè)網(wǎng)絡(luò)Network Namespace --network=container:容器ID
默認(rèn)先起一個(gè)容器:
docker run -d phpwind:v1
隨便啟一個(gè)容器共用phpwind:v1的網(wǎng)絡(luò)
docker run -it --network container:2735c9b78546 nginx
這時(shí)nginx容器和phpwind的ip都是相同的 ,同樣誰先占用80端口就是誰的
##查看網(wǎng)絡(luò)類型
docker inspect nginx容器ID |grep -i network
NetworkMode
none (空)
不為容器配置任何網(wǎng)絡(luò)功能 --network=none 不使用任何網(wǎng)絡(luò)類型
docker run --network=none -d phpwind:v1 /bin/bash
沒有網(wǎng)絡(luò)適合聯(lián)系使用琐谤,只有基礎(chǔ)命令
Docker跨主機(jī)容器之間的通信macvlan
默認(rèn)一個(gè)物理網(wǎng)卡蟆技,只有一個(gè)物理mac地址,虛擬多個(gè)mac地址
##創(chuàng)建macvlan網(wǎng)絡(luò)
docker network create --driver macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.254 -o parent=eth0 macvlan_1
##設(shè)置eth0的網(wǎng)卡為混雜模式
ip link set eth1 promisc on
##創(chuàng)建使用macvlan網(wǎng)絡(luò)的容器
docker run -it --network macvlan_1 --ip=10.0.0.200 busybox
練習(xí)1:docker跨主機(jī)容器間的通信flannel
[root@docker01 ~]# docker network create --driver macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.254 -o parent=eth0 macvlan_1
[root@docker01 ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
e088d87e361f bridge bridge local
e7638e062d74 macvlan_1 macvlan local
[root@docker01 ~]# docker run -it --network macvlan_1 alpine:latest
/ #
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:0A:00:00:01
inet addr:10.0.0.1 Bcast:10.0.0.255 Mask:255.255.255.0
[root@docker01 ~]# docker run -it --network macvlan_1 --ip 10.0.0.100 alpine:latest
/ #
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:0A:00:00:64
inet addr:10.0.0.100 Bcast:10.0.0.255 Mask:255.255.255.0
[root@docker01 ~]# docker stats --no-stream
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
e1b597321916 laughing_nobel 0.00% 192KiB / 1.934GiB 0.01% 0B / 0B 0B / 0B 1
af48e50366d1 confident_hypatia 0.00% 188KiB / 1.934GiB 0.01% 0B / 0B 0B / 0B
Dcoker跨主機(jī)容器通信之overlay
準(zhǔn)備 overlay 網(wǎng)絡(luò)實(shí)驗(yàn)環(huán)境
docker_progrium_consul.tar.gz鏡像包下載鏈接_提取碼: uk8p
設(shè)置容器的主機(jī)名
consul:kv類型的存儲(chǔ)數(shù)據(jù)庫(kù)(key:value)
docker01上:
[root@docker01 ~]# wget http://192.168.37.202/linux59/docker_progrium_consul.tar.gz
[root@docker01 ~]# docker load -i docker_progrium_consul.tar.gz
[root@docker01 ~]# vim /etc/docker/daemon.json
{
"hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"],
"cluster-store": "consul://10.0.0.11:8500",
"cluster-advertise": "10.0.0.11:2376"
}
[root@docker01 ~]# vim /usr/lib/systemd/system/docker.service
...
ExecStart=/usr/bin/dockerd --containerd=/run/containerd/containerd.sock
[root@docker01 ~]# systemctl daemon-reload
[root@docker01 ~]# systemctl restart docker
docker02上:
[root@docker02 ~]# wget http://192.168.37.202/linux59/docker_progrium_consul.tar.gz
[root@docker02 ~]# docker load -i docker_progrium_consul.tar.gz
[root@docker02 ~]# vim /etc/docker/daemon.json
{
"hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"],
"cluster-store": "consul://10.0.0.11:8500",
"cluster-advertise": "10.0.0.12:2376"
}
[root@docker02 ~]# vim /usr/lib/systemd/system/docker.service
...
ExecStart=/usr/bin/dockerd --containerd=/run/containerd/containerd.sock
docker01上創(chuàng)建容器:
[root@docker01 ~]# docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap
瀏覽器訪問10.0.0.11:8500
創(chuàng)建overlay網(wǎng)絡(luò)
[root@docker01 ~]# docker network create -d overlay --subnet 172.16.2.0/24 --gateway 172.16.2.254 ol1
[root@docker01 ~]# docker network ls
b2de7ebcc1f6 ol1 overlay global
#docker02上查看
[root@docker02 ~]# docker network ls
b2de7ebcc1f6 ol1 overlay global
啟動(dòng)容器測(cè)試
[root@docker01 ~]# docker run -it --network ol1 --name test01 busybox:latest
[root@docker02 ~]# docker run -it --network ol1 --name test02 busybox:latest
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:AC:10:02:02
inet addr:172.16.2.2 Bcast:172.16.2.255 Mask:255.255.255.0
/ # ping 172.16.2.1
64 bytes from 172.16.2.1: seq=0 ttl=64 time=1.665 ms
64 bytes from 172.16.2.1: seq=1 ttl=64 time=0.399 ms
#每個(gè)容器有兩塊網(wǎng)卡,eth0實(shí)現(xiàn)容器間的通訊,eth1實(shí)現(xiàn)容器訪問外網(wǎng)
搭建zabbix監(jiān)控測(cè)試環(huán)境
docker01上:
# 添加--network ol1的網(wǎng)絡(luò)環(huán)境
上面已添加
docker run --name mysql-server -t --network ol1\
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
-d mysql:5.7 \
--character-set-server=utf8 --collation-server=utf8_bin
docker run --name zabbix-java-gateway -t --network ol1\
-d zabbix/zabbix-java-gateway:latest
docker run --name zabbix-server-mysql -t --network ol1\
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
-e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
--link mysql-server:mysql \
--link zabbix-java-gateway:zabbix-java-gateway \
-p 10051:10051 \
-d zabbix/zabbix-server-mysql:latest
docker02上:
#上傳zabbix-web-nginx-mysql.tar.gz的鏡像并導(dǎo)入鏡像
[root@docker02 ~]# ls zabbix-web-nginx-mysql.tar.gz
zabbix-web-nginx-mysql.tar.gz
[root@docker02 ~]# docker load -i zabbix-web-nginx-mysql.tar.gz
#在docker02上添加zabbix-web-nginx-mysql容器
docker run --name zabbix-web-nginx-mysql -t --network ol1\
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
--link mysql-server:mysql \
--link zabbix-server-mysql:zabbix-server \
-p 80:80 \
-d zabbix/zabbix-web-nginx-mysql:latest
瀏覽器訪問10.0.0.12
導(dǎo)入模板
另外一種