1 docker鏡像相關操做
1.1 搜索官方倉庫鏡像
[root@docker01 ~]# docker search centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 3992 [OK]
ansible/centos7-ansible Ansible on Centos7 2 [OK]
列表說明
參數 說明
NAME 鏡像名稱
DESCRIPTION 鏡像說明
STARS 點贊數量
OFFICIAL 是不是官方的
AUTOMATED 是不是自動構建的
1.2 獲取鏡像
根據鏡像名稱拉取鏡像
[root@docker01 ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
af4b0a2388c6: Downloading 34.65MB/73.67MB
查看當前主機鏡像列表
[root@docker01 ~]# docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest ff426288ea90 3 weeks ago 207MB
nginx latest 3f8a4339aadd 5 weeks ago 108MB
拉第三方鏡像方法
docker pull index.tenxcloud.com/tenxcloud/httpd
1.3 導出鏡像
[root@docker01 ~]# docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest ff426288ea90 3 weeks ago 207MB
nginx latest 3f8a4339aadd 5 weeks ago 108MB
# 導出
[root@docker01 ~]# docker image save centos > docker-centos.tar.gz
1.4 刪除鏡像
[root@docker01 ~]# docker image rm centos:latest
[root@docker01 ~]# docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 3f8a4339aadd 5 weeks ago 108MB
2 導入鏡像
[root@docker01 ~]# docker image load -i docker-centos.tar.gz
e15afa4858b6: Loading layer 215.8MB/215.8MB
Loaded image: centos:latest
[root@docker01 ~]# docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest ff426288ea90 3 weeks ago 207MB
nginx latest 3f8a4339aadd 5 weeks ago 108MB
3 查看鏡像的詳細信息
[root@docker01 ~]# docker image inspect centos
--inspect命令
用於查看鏡像和容器的詳細信息,默認會列出所有信息
2 容器的平常管理
2.1 容器的起/停
最簡單的運行一個容器
[root@docker01 ~]# docker run nginx
容器內的第一個進程必須一直處於運行的狀態,不然這個容器,就會處於退出狀態!
查看正在運行的容器
[root@docker01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8708e93fd767 nginx "nginx -g 'daemon of…" 6 seconds ago Up 4 seconds 80/tcp keen_lewin
查看你容器詳細信息/ip
[root@docker01 ~]# docker container inspect 容器名稱/id
查看你全部容器(包括未運行的)
[root@docker01 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8708e93fd767 nginx "nginx -g 'daemon of…" 4 minutes ago Exited (0) 59 seconds ago keen_lewin
f9f3e6af7508 nginx "nginx -g 'daemon of…" 5 minutes ago Exited (0) 5 minutes ago optimistic_haibt
8d8f81da12b5 nginx "nginx -g 'daemon of…" 3 hours ago Exited (0) 3 hours ago lucid_bohr
中止容器
[root@docker01 ~]# docker stop 容器名稱/id
或
[root@docker01 ~]# docker container kill 容器名稱/id
2.2 進入容器方法
啓動時進去方法
[root@docker01 ~]# docker run -it #參數:-it 可交互終端
[root@docker01 ~]# docker run -it nginx:latest /bin/bash
root@79241093859e:/#
退出/離開容器
1 ctrl+p & ctrl+q
啓動後進入容器的方法
啓動一個docker
[root@docker01 ~]# docker run -it centos:latest
[root@1bf0f43c4d2f /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 15:47 pts/0 00:00:00 /bin/bash
root 13 1 0 15:47 pts/0 00:00:00 ps -ef
--attach命令
docker attach命令進入容器,對應開發者頗有用,能夠鏈接到正在運行的容器,觀察容器的運行情況,或與容器的主進程進行交互。
[root@docker01 ~]# docker attach 1bf0f43c4d2f
自命名啓動一個容器 --name
[root@docker01 ~]# docker attach 1bf0f43c4d2f
exrc 進入容器方法(推薦使用)
[root@docker01 ~]# docker exec -it 容器id或者名稱 /bin/bash
[root@b20fa75b4b40 /]# 從新分配一個終端
[root@b20fa75b4b40 /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 16:11 pts/0 00:00:00 /bin/bash
root 13 0 0 16:14 pts/1 00:00:00 /bin/bash
root 26 13 0 16:14 pts/1 00:00:00 ps -ef
2.3 刪除全部容器
[root@docker01 ~]#
docker rm -f `docker ps -a -q`
# -f 強制刪除
2.4
啓動時進行端口映射
-p參數端口映射
[root@docker01 ~]# docker run -d -p 8888:80 nginx:latest
287bec5c602633c03e1fc5b0b8262fe76507be3dfae4ce5cd2ee2d1e8a89a9
不一樣指定映射方法
參數 說明
-p hostPort:containerPort 端口映射 -p 8080:80
-p ip:hostPort:containerPort 配置監聽地址 -p 10.0.0.100:8080:80
-p ip::containerPort 隨機分配端口 -p 10.0.0.100::80
-p hostPort:containerPort:udp 指定協議 -p 8080:80:tcp
-p 81:80 –p 443:443 指定多個
隨機映射
docker run -P (大P)# 須要鏡像支持
3 Docker 數據卷的管理
把目錄掛到docker中持久化 數據卷(文件或目錄)
-v 卷名:/data
-v src(宿主機的目錄):dst(容器的目錄)
3.1 掛載宿主機目錄到docker中
掛載卷
[root@docker01 ~]#
docker run -d -p 80:80 -v /data:/usr/share/nginx/html nginx:latest
079786c1e297b5c5031e7a8430c74e91ad065205043c60dbb78a259d09
容器內站點目錄: /usr/share/nginx/html
在宿主機寫入數據,查看
[root@docker01 ~]# echo "http://www.nmtui.com" >/data/index.html
[root@docker01 ~]# curl 10.0.0.100
http://www.nmtui.com
設置共享卷,使用同一個卷啓動一個新的容器
[root@docker01 ~]# docker run -d -p 8080:80 -v /data:/usr/share/nginx/html nginx:latest
351f0bd78d273604bd0971b3979aa0f3cbf45247274493d2490527babb4e42
[root@docker01 ~]# curl 10.0.0.100:8080
http://www.nmtui.com
查看卷列表
[root@docker01 ~]# docker volume ls
DRIVER VOLUME NAME
3.2 建立卷後掛載
建立一個卷
[root@docker01 ~]# docker volume create
f3b95f7bd17da220e63d4e70850b8d7fb3e20f8ad02043423a39fdd072b83521
[root@docker01 ~]# docker volume ls
DRIVER VOLUME NAME
local f3b95f7bd17da220e63d4e70850b8d7fb3e20f8ad02043423a39fdd072b83521
指定卷名
[root@docker01 ~]# docker volume create smile
[root@docker01 ~]# docker volume ls
DRIVER VOLUME NAME
local smile
local f3b95f7bd17da220e63d4e70850b8d7fb3e20f8ad02043423a39fdd072b83521
查看卷詳細路徑
[root@docker01 ~]# docker volume inspect smile
[
{
"CreatedAt": "2018-02-01T00:39:25+08:00",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/smile/_data",
"Name": "smile",
"Options": {},
"Scope": "local"
}
]
使用卷建立
[root@docker01 ~]# docker run -d -p 9000:80 -v smile:/usr/share/nginx/html nginx:latest
1434559cff996162da7ce71820ed8f5937fb7c02113bbc84e965845c219d3503
# 宿主機測試
[root@docker01 ~]# echo 'blog.nmtui.com' >/var/lib/docker/volumes/smile/_data/index.html
[root@docker01 ~]# curl 10.0.0.100:9000
blog.nmtui.com
設置卷
[root@docker01 ~]# docker run -d -P --volumes-from 079786c1e297 nginx:latest
b54b9c9930b417ab3257c6e4a8280b54fae57043c0b76b9dc60b4788e92369fb
查看使用的端口
[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:22 0.0.0.0:* LISTEN 1400/sshd
tcp 0 0 10.0.0.100:2375 0.0.0.0:* LISTEN 26218/dockerd
tcp6 0 0 :::9000 :::* LISTEN 32015/docker-proxy
tcp6 0 0 :::8080 :::* LISTEN 323/docker-proxy
tcp6 0 0 :::80 :::* LISTEN 322/docker-proxy
tcp6 0 0 :::22 :::* LISTEN 1400/sshd
tcp6 0 0 :::32769 :::* LISTEN 32300/docker-proxy
[root@docker01 ~]# curl 10.0.0.100:32769
http://www.nmtui.com
3.3 手動將容器保存爲鏡像
本次是基於docker官方centos 6.8 鏡像建立
官方鏡像列表:https://hub.docker.com/explore/
啓動一個centos6.8的鏡像
[root@docker01 ~]# docker pull centos:6.8
[root@docker01 ~]# docker run -it -p 1022:22 centos:6.8 /bin/bash
# 在容器種安裝sshd服務,並修改系統密碼
[root@582051b2b92b ~]# yum install openssh-server -y
[root@582051b2b92b ~]# echo "root:123456" |chpasswd
[root@582051b2b92b ~]# /etc/init.d/sshd start
啓動完成後鏡像ssh鏈接測試
將容器提交爲鏡像
[root@docker01 ~]# docker commit brave_mcclintock centos6-ssh
使用新的鏡像啓動容器
[root@docker01 ~]# docker run -d -p 1122:22 centos6-ssh:latest /usr/sbin/sshd -D
5b8161fda2a9f2c39c3c67e2eb9274977e7723fe51f08a0190217ae93094
在容器安裝httpd服務
[root@5b8161fda2a9 /]# yum install httpd -y
編寫啓動腳本腳本
[root@5b8161fda2a9 /]# cat init.sh
#!/bin/bash
/etc/init.d/httpd start
/usr/sbin/sshd -D
[root@5b8161fda2a9 /]# chmod +x init.sh
# 注意執行權限
再次提交爲新的鏡像
[root@docker01 ~]# docker commit 5b8161fda2a9 centos6-httpd
sha256:705d67a786cac040800b8485cf046fd57b1828b805c515377fc3e9cea3a481c1
啓動鏡像,作好端口映射。並在瀏覽器中測試訪問
[root@docker01 ~]# docker run -d -p 1222:22 -p 80:80 centos6-httpd /init.sh
46fa6a06644e31701dc019fb3a8c3b6ef008d4c2c10d46662a97664f838d8c2c