容器管理
docker create -it centos6 bash //这样可以创建一个容器,但该容器并没有启动
docker start container_id //启动容器后,可以使用 docker ps 查看到,有start 就有stop,和restart 之前我们使用的docker run 相当于先create再start
docker run -it centos bash 这样进入了一个虚拟终端里面,我们可以运行一些命令,使用命令exit或者ctrl d 退出该bash,当退出后这个容器也会 停止。
docker run -d 可以让容器在后台运行 比如:docker run -d centos bash -c “while :; do echo “123”; sleep 2; done”
docker run --name web -itd centos bash // --name 给容器自定义名字
docker run --rm -it centos bash -c “sleep 30” //–rm 可以让容器退出后直接删除,在这里命令执行完容器就会退 出
< root@linux0 ~> $ docker create -it centos
b37f52a9c3082a568b0f66b77bb02c43700b8b12fe9d4f5606f5d657942d1f4d
< root@linux0 ~> $ docker create -it centos bash
deb1179b137fcb8763aa4297ec0200746139d3d50745d9989d4b983ca24d854f
< root@linux0 ~> $ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
< root@linux0 ~> $ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
deb1179b137f centos "bash" 12 seconds ago Created reverent_moore
b37f52a9c308 centos "/bin/bash" 30 seconds ago Created keen_blackwell
< root@linux0 ~> $ docker start b37f52
b37f52
< root@linux0 ~> $ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b37f52a9c308 centos "/bin/bash" About a minute ago Up 4 seconds keen_blackwell
< root@linux0 ~> $ docker run -it centos
[ root@78eecc51ac7e /]
exit
< root@linux0 ~> $ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
78eecc51ac7e centos "/bin/bash" 17 seconds ago Exited ( 0) 7 seconds ago practical_goldberg
< root@linux0 ~> $ docker start 78eec
78eec
< root@linux0 ~> $ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
78eecc51ac7e centos "/bin/bash" 49 seconds ago Up 12 seconds practical_goldberg
< root@linux0 ~> $ docker run --name web -itd centos bash
f1aa4d85f8b18ad0673f66127c6c26dae7080fca122fcfcb37d1b29b3096af5c
< root@linux0 ~> $ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f1aa4d85f8b1 centos "bash" 6 seconds ago Up 5 seconds web
78eecc51ac7e centos "/bin/bash" 7 minutes ago Up 6 minutes practical_goldberg
< root@linux0 ~> $ docker exec -it web bash
[ root@f1aa4d85f8b1 /]
< root@linux0 ~> $ date && docker run --rm -it centos bash -c "sleep 10" && date
2020年 01月 07日 星期二 18:24:55 CST
2020年 01月 07日 星期二 18:25:06 CST
< root@linux0 ~/git1> $ date && docker ps -a
2020年 01月 07日 星期二 18:24:57 CST
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5a8d44deac5e centos "bash -c 'sleep 10'" 2 seconds ago Up 1 second bold_nobel
78eecc51ac7e centos "/bin/bash" 15 minutes ago Up 14 minutes practical_goldberg
docker logs 可以获取到容器的运行历史信息,用法如下 docker logs container_id
docker attach 可以进入一个后台运行的容器,比如 docker attach container_id //但是attach命令不算好用,比如我们想要退出终端,就得exit了,这样容器也就退 出了,还有一种方法
docker exec -it container_id bash //可以临时打开一个虚拟终端,并且exit后,容器依然运行着
docker rm container_id //container_id是ps的时候查看到的,这样就可以把container删除,如果是运行的容器,>可以加-f
docker export container_id > file.tar // 导出容器,可以迁移到其他机器上,需要导入
cat file.tar |docker import - aming_test //这样会生成aming_test的镜像
logs
< root@linux0 ~> $ docker logs 78eecc
[ root@78eecc51ac7e /]
exit
< root@linux0 ~> $ docker attach 78eecc
[ root@78eecc51ac7e /]
exit
< root@linux0 ~> $ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
78eecc51ac7e centos "/bin/bash" 20 minutes ago Exited ( 0) 8 seconds ago practical_goldberg
< root@linux0 ~> $ docker export 78eecc5 > origin.tar
< root@linux0 ~> $ du -sh origin.tar
217M origin.tar
pull文件存放位置
< root@linux0 /var/lib/docker/overlay2/79b37363423cef05bef93f096fe582d79c4316b608186bbe044d0eb574c53c94/diff> $ ls
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
< root@linux0 /var/lib/docker/overlay2/79b37363423cef05bef93f096fe582d79c4316b608186bbe044d0eb574c53c94/diff> $ docker pull centos
Using default tag: latest
latest: Pulling from library/centos
729ec3a6ada3: Pull complete
Digest: sha256:f94c1d992c193b3dc09e297ffd54d8a4f1dc946c37cbeceb26d35ce1647f88d9
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest
< root@linux0 /var/lib/docker/overlay2/79b37363423cef05bef93f096fe582d79c4316b608186bbe044d0eb574c53c94/diff> $ cd /var/lib/docker
< root@linux0 /var/lib/docker> $ ! du
du -sh ./*
16K ./builder
56K ./buildkit
0 ./containers
1.4M ./image
52K ./network
488M ./overlay2
0 ./plugins
0 ./runtimes
0 ./swarm
0 ./tmp
0 ./trust
24K ./volumes
< root@linux0 /var/lib/docker> $ cd overlay2/
< root@linux0 /var/lib/docker/overlay2> $ ls
79b37363423cef05bef93f096fe582d79c4316b608186bbe044d0eb574c53c94 backingFsBlockDev
7d8064103fde98b9ae67f307d1900ec42852b674aec300503d2603f29ef40cf4 l
< root@linux0 /var/lib/docker/overlay2> $ ! du
du -sh ./*
258M ./79b37363423cef05bef93f096fe582d79c4316b608186bbe044d0eb574c53c94
230M ./7d8064103fde98b9ae67f307d1900ec42852b674aec300503d2603f29ef40cf4
0 ./backingFsBlockDev
0 ./l
< root@linux0 /var/lib/docker/overlay2> $ du -sh 7d8064103fde98b9ae67f307d1900ec42852b674aec300503d2603f29ef40cf4/*
230M 7d8064103fde98b9ae67f307d1900ec42852b674aec300503d2603f29ef40cf4/diff
4.0K 7d8064103fde98b9ae67f307d1900ec42852b674aec300503d2603f29ef40cf4/link
< root@linux0 /var/lib/docker/overlay2> $ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
666 latest c03bf7daae51 22 minutes ago 249MB
centos latest 0f3e07c0138f 3 months ago 220MB
< root@linux0 /var/lib/docker/overlay2> $ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
666 latest c03bf7daae51 23 minutes ago 249MB
centos latest 0f3e07c0138f 3 months ago 220MB
仓库管理
docker pull registry //下载registry 镜像,registy为docker官方提供的一个镜像,我们可以用它来创建本地的docker私有仓库。
docker run -d -p 5000:5000 registry //以registry镜像启动容器,-p会把容器的端口映射到宿主机上,:左边为宿主机监听端口,:右边为容器监听端口
curl 127.0.0.1:5000/v2/_catalog //可以访问它
下面我们来把其中一个镜像上传到私有仓库 docker tag aming_test 172.7.15.113:5000/centos //标记一下tag,必须要带有私有仓库的ip:port
docker push 172.7.15.113:5000/centos //把标记的镜像给推送到私有仓库 此时并不会成功,错误信息Get https://172.7.15.113:5000/v2/: http: server gave HTTP response to HTTPS client
更改配置文件,vi /etc/docker/daemon.json//更改为 { “insecure-registries”:[“172.7.15.113:5000”] } systemctl restart docker
docker ps -a //查看容器已经关闭,还需要启动 docker start id //这里的id为registry容器id
再次push docker push 172.7.15.113:5000/centos curl 127.0.0.1:5001/v2/_catalog //可以查看到推送上来的镜像
私有仓库示例
< root@linux0 ~> $ docker pull registry
Using default tag: latest
latest: Pulling from library/registry
c87736221ed0: Pull complete
1cc8e0bb44df: Pull complete
54d33bcb37f5: Pull complete
e8afc091c171: Pull complete
b4541f6d3db6: Pull complete
Digest: sha256:8004747f1e8cd820a148fb7499d71a76d45ff66bac6a29129bfdbfdc0154d146
Status: Downloaded newer image for registry:latest
docker.io/library/registry:latest
< root@linux0 ~> $ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 0f3e07c0138f 3 months ago 220MB
registry latest f32a97de94e1 10 months ago 25.8MB
< root@linux0 ~> $ docker run -d -p 5000:5000 registry
4348279c542cc3170c4a91cc4e24052c6b792f9a780dabe92f1d8372f0cf6dfd
< root@linux0 ~> $ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4348279c542c registry "/entrypoint.sh /etc…" 51 seconds ago Up 49 seconds 0.0.0.0:5000-> 5000/tcp elegant_blackburn
< root@linux0 ~> $ docker tag centos 192.168.87.149:5000/centos
< root@linux0 ~> $ docker push ! $
docker push 192.168.87.149:5000/centos
The push refers to repository [ 192.168.87.149:5000/centos]
Get https://192.168.87.149:5000/v2/: http: server gave HTTP response to HTTPS client
< root@linux0 ~> $ vim /etc/docker/daemon.json
{ "insecure-registries" :[ "192.168.87.149:5000" ] }
< root@linux0 ~> $ systemctl restart docker
< root@linux0 ~> $ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4348279c542c registry "/entrypoint.sh /etc…" 26 minutes ago Exited ( 2) 10 seconds ago elegant_blackburn
78eecc51ac7e centos "/bin/bash" 3 hours ago Exited ( 0) 7 minutes ago practical_goldberg
< root@linux0 ~> $ docker start 4348279
4348279
< root@linux0 ~> $ docker push 192.168.87.149:5000/centos
The push refers to repository [ 192.168.87.149:5000/centos]
9e607bb861a7: Pushed
latest: digest: sha256:6ab380c5a5acf71c1b6660d645d2cd79cc8ce91b38e0352cbf9561e050427baf size: 529
< root@linux0 ~> $ ! curl
curl 127.0.0.1:5000/v2/_catalog
{ "repositories" :[ "centos" ] }
< root@linux0 ~> $ ll /var/lib/docker/volumes/265c0a0ac28510b3c5fab3ea5d474fd0a97191a4325715f61c6db1a0ff96c22b/_data/docker/registry/v2/blobs/sha256/72/729ec3a6ada3a6d26faca9b4779a037231f1762f759ef34c08bdd61bf52cd704/data
-rw-r--r-- 1 root root 71522807 1月 7 23:14 /var/lib/docker/volumes/265c0a0ac28510b3c5fab3ea5d474fd0a97191a4325715f61c6db1a0ff96c22b/_data/docker/registry/v2/blobs/sha256/72/729ec3a6ada3a6d26faca9b4779a037231f1762f759ef34c08bdd61bf52cd704/data
< root@linux0 ~> $ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.87.149:5000/centos latest 0f3e07c0138f 3 months ago 220MB
centos latest 0f3e07c0138f 3 months ago 220MB
registry latest f32a97de94e1 10 months ago 25.8MB
< root@linux0 ~> $ docker rmi centos:latest
Untagged: centos:latest
Untagged: centos@sha256:f94c1d992c193b3dc09e297ffd54d8a4f1dc946c37cbeceb26d35ce1647f88d9
< root@linux0 ~> $ docker rmi 0f3e07c
Untagged: 192.168.87.149:5000/centos:latest
Untagged: 192.168.87.149:5000/centos@sha256:6ab380c5a5acf71c1b6660d645d2cd79cc8ce91b38e0352cbf9561e050427baf
Deleted: sha256:0f3e07c0138fbe05abcb7a9cc7d63d9bd4c980c3f61fea5efa32e7c4217ef4da
Deleted: sha256:9e607bb861a7d58bece26dd2c02874beedd6a097c1b6eca5255d5eb0d2236983
< root@linux0 ~> $ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry latest f32a97de94e1 10 months ago 25.8MB
< root@linux0 ~> $ docker pull 192.168.87.149:5000/centos
Using default tag: latest
latest: Pulling from centos
729ec3a6ada3: Pull complete
Digest: sha256:6ab380c5a5acf71c1b6660d645d2cd79cc8ce91b38e0352cbf9561e050427baf
Status: Downloaded newer image for 192.168.87.149:5000/centos:latest
192.168.87.149:5000/centos:latest
< root@linux0 ~> $ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.87.149:5000/centos latest 0f3e07c0138f 3 months ago 220MB
registry latest f32a97de94e1 10 months ago 25.8MB
Docker 数据管理
挂载本地的目录到容器里 docker run -tid -v /data/:/data centos bash //-v 用来指定挂载目录,:前面的/data/为宿主机本地目录,:后面的 /data/为容器里的目录,会在容器中自动创建
挂载数据卷 其实我们挂载目录的时候,可以指定容器name,如果不指定就随机定义了。比如上面我们没有指定,它就生成了一个名>字为relaxed_franklin,这个名字可以使用命令 docker ps 看最右侧一列 docker run -itd --volumes-from relaxed_franklin aming123 bash 这样,我们使用aming123镜像创建了新的容器,并且使用了 relaxed_franklin 容器的数据卷
< root@linux0 ~> $ docker run -tid -v /data/:/data centos bash
c4d17b70d13a54acc266fd3b1cb7163d52d49b658ef858506dc686ccde4a1a88
< root@linux0 ~> $ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c4d17b70d13a centos "bash" 4 seconds ago Up 3 seconds jovial_raman
11ccf36436e6 registry "/entrypoint.sh /etc…" 2 hours ago Up 2 hours 0.0.0.0:5000-> 5000/tcp unruffled_wilson
< root@linux0 ~> $ docker run -itd --volumes-from jovial_raman centos bash
8a3baa8cdc1d57da52f0402e94e1c179c85021b9aaf76a09cf5a4f7a29dcb47a
< root@linux0 ~> $ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8a3baa8cdc1d centos "bash" 13 seconds ago Up 12 seconds wonderful_tereshkova
c4d17b70d13a centos "bash" 3 minutes ago Up 3 minutes jovial_raman
11ccf36436e6 registry "/entrypoint.sh /etc…" 2 hours ago Up 2 hours 0.0.0.0:5000-> 5000/tcp unruffled_wilson
< root@linux0 ~> $ docker exec -it 8a3baa8 bash
[ root@8a3baa8cdc1d /]
backup backup2 err.log git logs mysql mysql.bak redis_data svnroot syny wwwroot
Dockerfile生成一个目录用于与子容器分享数据
< root@linux0 ~> $ cat Dockerfile
FROM centos
VOLUME [ "/data1" ]
< root@linux0 ~> $ docker build -t juan0:1 -f ./Dockerfile .
Sending build context to Docker daemon 2.414GB
Step 1/2 : FROM centos
---> 0f3e07c0138f
Step 2/2 : VOLUME [ "/data1" ]
---> Running in 7556a39729da
Removing intermediate container 7556a39729da
---> 44064520ce05
Successfully built 44064520ce05
Successfully tagged juan0:1
< root@linux0 ~> $ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
juan0 1 44064520ce05 11 seconds ago 220MB
192.168.87.149:5000/centos latest 0f3e07c0138f 3 months ago 220MB
centos latest 0f3e07c0138f 3 months ago 220MB
registry latest f32a97de94e1 10 months ago 25.8MB
< root@linux0 ~> $ docker run -itd juan0:1 bash
7b81b7cf79d799b4225973de3f6a2ee113e9425e92c65ca1ed51b784f2677d3a
< root@linux0 ~> $ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7b81b7cf79d7 juan0:1 "bash" 6 seconds ago Up 6 seconds priceless_wescoff
11ccf36436e6 registry "/entrypoint.sh /etc…" 3 hours ago Up 3 hours 0.0.0.0:5000-> 5000/tcp unruffled_wilson
< root@linux0 ~> $ docker exec -it 7b81b7cf bash
[ root@7b81b7cf79d7 /]
bin data1 dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[ root@7b81b7cf79d7 /]
[ root@7b81b7cf79d7 data1]
[ root@7b81b7cf79d7 data1]
testsharing
< root@linux0 ~> $ docker run --name juan1 -itd --volumes-from priceless_wescoff centos /bin/bash
68143da08c49238f76fa3da49ff2789673501d6d03a1f51b18b2a30f36511114
< root@linux0 ~> $ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
68143da08c49 centos "/bin/bash" 8 seconds ago Up 7 seconds juan1
7b81b7cf79d7 juan0:1 "bash" 5 minutes ago Up 5 minutes priceless_wescoff
11ccf36436e6 registry "/entrypoint.sh /etc…" 3 hours ago Up 3 hours 0.0.0.0:5000-> 5000/tcp unruffled_wilson
< root@linux0 ~> $ docker exec -it 68143d bash
[ root@68143da08c49 /]
bin data1 dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[ root@68143da08c49 /]
testsharing
数据卷的备份与恢复
此情况是容器分享的目录并没有与容主机目录同步,只在容器间同步
备份
< root@linux0 ~> $ docker run --name juanbk -itd --volumes-from priceless_wescoff -v /dockerbk/:/dockerbk centos tar cvf /dockerbk/data1.tar /data1/
d6fdd89bf4954e2f53532e77f72c578b707fefe4e6fe4217b0c7986b3bf7ac1b
< root@linux0 ~> $ ls /dockerbk/
data1.tar
< root@linux0 ~> $ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d6fdd89bf495 centos "tar cvf /dockerbk/d…" 20 minutes ago Exited ( 0) 20 minutes ago juanbk
68143da08c49 centos "/bin/bash" 10 hours ago Up 10 hours juan1
7b81b7cf79d7 juan0:1 "bash" 10 hours ago Up 10 hours priceless_wescoff
11ccf36436e6 registry "/entrypoint.sh /etc…" 12 hours ago Up 12 hours 0.0.0.0:5000-> 5000/tcp unruffled_wilson
< root@linux0 ~> $ docker run -itd -v /dockerbk/:/dockerbk juan0:1 mv /dockerbk/* /data1/
f3fc5bc8df255a3762bb9eab291c4e9e374923ce12b85ff2e48da2cfe8cb6a00
< root@linux0 ~> $ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f3fc5bc8df25 juan0:1 "mv /dockerbk/data1.…" 21 seconds ago Exited ( 0) 21 seconds ago ecstatic_golick
d6fdd89bf495 centos "tar cvf /dockerbk/d…" 20 minutes ago Exited ( 0) 20 minutes ago juanbk
68143da08c49 centos "/bin/bash" 10 hours ago Up 10 hours juan1
7b81b7cf79d7 juan0:1 "bash" 10 hours ago Up 10 hours priceless_wescoff
11ccf36436e6 registry "/entrypoint.sh /etc…" 12 hours ago Up 12 hours 0.0.0.0:5000-> 5000/tcp unruffled_wilson
< root@linux0 ~> $ docker run --name huifu -itd --volumes-from ecstatic_golick centos /bin/bash
03ff844e1c12b30d44947a3eb5265a6d88578a8b9c6042ab8915969e58d97130
< root@linux0 ~> $ docker exec -it 03ff844e1 bash
[ root@03ff844e1c12 /]
data1.tar
[ root@03ff844e1c12 /]
[ root@03ff844e1c12 data1]
[ root@03ff844e1c12 data1]
[ root@03ff844e1c12 data1]
data1 data1.tar testsharing