Docker安装
自带源安装
CentOS 7 中 Docker的安装:
Docker软件包已经包括在默认的CentOS-Extras软件源(联网使用centos7u2自带网络Yum源)里。因此想要安装docker,只需要运行下面的yum命令:
# yum install docker
启动Docker服务
# service docker start
# chkconfig docker on
CentOS 7
# systemctl start docker
# systemctl enable docker
确定docker服务在运行:
结果会显示服务端和客户端的版本,如果只显示客户端版本说明服务没有启动
[root@docker ~]# docker version
Client: Docker Engine - Community
Version: 19.03.12
API version: 1.40
Go version: go1.13.10
Git commit: 48a66213fe
Built: Mon Jun 22 15:46:54 2020
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.12
API version: 1.40 (minimum version 1.12)
Go version: go1.13.10
Git commit: 48a66213fe
Built: Mon Jun 22 15:45:28 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.2.13
GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
查看docker基本信息
# docker info
校验Docker的安装
[root@docker ~]# docker run -it ubuntu bash
Unable to find image 'ubuntu:latest' locally
Trying to pull repositery daocloud.io/ubuntu ...
latest: Pulling from daocloud.io/ubuntu
22ecafbbcc4a: Pull complete
580435e0a086: Pull complete
Digest: sha1234jb12kjb3k4kj1h23jkh41kjb23kl14b
如果自动进入下面的容器环境,说明ubuntu镜像运行成功,docker的安装也没有问题,可以操作容器了
root@50a0449d7729:/# pwd
/
root@50a0449d7729:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
docker版本和官方源安装
moby、docker-ce与docker-ee
最早时docker是一个开源项目,主要由docker公司维护。
2017年3月1日起,docker公司将原先的docker项目改名为moby,并创建了docker-ce和docker-ee
三者关系:
–moby是继承了原先的docker的项目,是社区维护的开源项目,谁都可以在moby的基础打造自己的容器产品
–docker-ce是docker公司维护的开源项目,是一个基于moby项目的免费的容器产品
–docker-ee是docker公司维护的闭源产品,是docker公司的商业产品。
–moby project由社区维护,docker-ce project是docker公司维护、docker-ee是闭源的。
要使用免费的docker,从https://github/docker/docker-ce 上获取
要使用收费的docker,从https://www.docker.com/products/docker-enterprise 上获取
docker-ce的发布计划
–v1.13.1之后,发布计划更改为:
–Edge: 月版本,每月发布一次,命名格式为YY.MM,维护到下个月的版本发布
–Stable: 季度发布,每季度发布一次,命名格式为YY.MM,维护4个月
安装:
–Docker-ce的release计划跟随moby的release计划,可以使用下面的命令直接安装最新的docker-ce
# curl -fsSL https://get.docker.com/ | sh
CentOS
如果是centos,上面的安装命令会在系统上添加tum源:/etc/yum.repos.d/docker-ce.repo
# wget https://download.docker.com/linux/centos/docker-ce.repo
# mv docker-ce.repo /etc/yum.repos.d/
# yum install -y docker-ce
或者直接下载rpm安装:
# wget https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-17.09..0.ce-1.e17.centos.x86_64.rpm
# yum localinstall docker-ce-17.09…0.ce-1.e17.centos.x86_64.rpm
注意:
–在说docker的时候尽量说Linux docker
–因为Docker on Mac,以及windows Docker (Hyper-V 实现),实际上是基于虚拟化技术实现的,跟我们介绍使用的Linux容器完全不同。
国内源安装新版docker
使用aliyun docker yum源安装新版docker
删除已安装的Docker
# yum remove docker
配置阿里云Docker yum源
# yum install -y yum-utils device-mapper-persistent-data lvm2 git
# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装指定版本
查看Docker版本
# yum list docker-ce --showduplicates
安装较旧版本(比如Docker 17.03.2):
需要指定完整的rpm包的包名,并且加上--setopt=obsoletes=0 参数:
# yum install -y --setopt=obsoletes=0 docker-ce-17.03.2.ce-1.e17.centos.noarch
安装Docker新版本(比如Docker 19.03.12):
加上rpm包名的版本号部分或不加都可以:
# yum install -y docker-ce-19.03.12.ce
或者
# yum install -y docker-ce
启动Docker服务
# systemctl start docker
# systemctl enable docker
查看docker版本状态:
# docker -v
Docker version 19.03.12, build 48a66213fe
# docker version
Client: Docker Engine - Community
Version: 19.03.12
API version: 1.40
Go version: go1.13.10
Git commit: 48a66213fe
Built: Mon Jun 22 15:46:54 2020
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.12
API version: 1.40 (minimum version 1.12)
Go version: go1.13.10
Git commit: 48a66213fe
Built: Mon Jun 22 15:45:28 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.2.13
GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
# docker info
Client:
Debug Mode: false
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 19.03.12
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 7ad184331fa3e55e52b890ea95e65ba581ae3429
runc version: dc9208a3303feef5b3839f4323d9beb36df0a9dd
init version: fec3683
Security Options:
seccomp
Profile: default
Kernel Version: 3.10.0-1062.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 972.4MiB
Name: docker
ID: 6CY2:LNDP:SCOQ:6PXE:F3BE:DLIA:ECFJ:OVTI:RQCR:RX6T:UOC6:UR3B
Docker Root Dir: /var/lib/docker
Debug Mode: false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
[=================================================================]
bonding
报错1:
docker info的时候报如下错误
bridge-nf-call-iptables is disabled
解决1:
追加如下配置,然后重启系统
# vim /etc/sysctl.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptable = 1
net.bridge.bridge-nf-call-arptables = 1
问题2:
虚拟机ping百度也能ping通,但是需要等好几秒才出结果,关键是下载镜像一直报错如下:
# docker pull daocloud.io/library/nginx
Using default tag: latest
Error response from daemon: Get https://daocloud.io/v2/: dial tcp: lookup dapcloud.io on 192.168.139.15: read udp 192.168.139.100:41335->192.168.139.299:53: i/o timeout
解决2:
我的虚拟机使用网关和dns都是虚拟机自己的,把DNS改成8.8.8.8问题就解决了,ping百度也秒出结果
# vim /etc/resolv.conf
nameserver 8.8.8.8
登入登出docker hub
login Register or log in to a Docker registry
登陆到自己的Docker register,需由Docker Hub的注册账号
# docker login
Username: test
Password:
Email: xxx@foxmail.com
WARNING: login credentials saved in /root/.docker/config.json
Login Succeeded
logout Log out from a Docker registry
退出登录
# docker logout
Remove login credentials for https://index.docker.io/v1/
注:推送镜像库到私有源(可注册docker官方账户,推送到官方自有账户)
国内镜像源
去查看如何使用aliyun的docker镜像库
去查看如何使用网易蜂巢的docker镜像库
Docker 加速器
使用Docker的时候,需要经常从官方获取镜像,但是由于显而易见的网络原因,拉取镜像的过程非常耗时,严重影响使用Docker的体验,因此DaoCloud推出了加速器工具解决这个难题,通过智能路由和缓存机制,极大提升了国内网络访问Docker Hub的速度,目前已经拥有了广泛的用户群体,并得到了Docker官方的大大推荐。
如果您是在国内的网络环境使用Docker,那么Docker加速器一定能帮助到您。
Docker加速器对Docker的版本有要求吗?
需要Docker 1.8或更高版本才能使用,如果您没有安装Docker或者版本较旧,请安装或升级。
Docker 加速器支持什么系统?
Linux、MacOS以及Windows平台
Docker 加速器是否收费?
DaoCloud为了降低国内用户使用Docker的门槛,提供永久免费的加速器服务,请放心使用。
国内比较好的镜像源:网易蜂巢、aliyun和daocloud,下面是daocloud配置方式:
Docker Hub并没有在国内部署服务器或者使用国内的CDN服务,因此在国内特殊的网络环境下,镜像下载十分耗时。
为了克服跨洋网络延迟,能够快速高效地下载Docker镜像,可以采用DaoCloud提供的服务Docker Hub Mirror,速度快很多
1.注册网站账号
2.然后进入你自己的"控制台",选择"加速器",点"立即开始",接入你自有的主机,就看到如下的内容了
· 下载并安装相关软件
# curl -L -o /tmp/daomonit_amd64.deb https://get.daocloud.io/daomonit/daomonit_amd64.debsudo
# dpkg -4i /tmp/daomonit_amd64.deb
· 配置
# sudo daomonit -token=e16ed1123bjkj123412k23123hjh2314b save-config
· 启动服务
# service daomonit start
3.配置完成后从Docker Hub Mirror下载镜像,命令:
# dao pull ubuntu
注1: 第一次使用daocloud是配置了加速器的,可以直接使用dao pull centos拉取经过加速器之后的镜像,但是后来发现。不使用加速器也可以直接在daocloud官网上找到想要拉取的镜像地址进行拉取,比如: #docker pull
注2: 上面配置加速器的方法,官网会更新,最新方法你应该根据官网提示去操作。
以下为zyixin亲测
使用国内镜像:
进入网站:https://hub.daocloud.io/
注册账号:zyixin
进入镜像市场:填写搜索的镜像名称
选择第一个
点击右边快速部署:
写入名称,选择我的主机,按提示继续在主机上进行所有操作
# mkdir /etc/docker
# cd /etc/docker
# curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
docker version >= 1.12
{“registry-mirrors”: [“http://f1361db2.m.daocloud.io”]}
Success.
You need to restart docker to take effect: sudo systemctl restart docker
出现如下界面:说明自有主机接入完成
接下来我们在镜像市场找到一个centos的镜像:点击右面的拉取按钮,会出现拉取命令如下:
我们按命令执行:
# docker pull daocloud.io/library/centos:7
出现如下提示:
Trying to pull repository daocloud.io/library/centos ...
latest: Pulling from daocloud.io/library/centos:7
524b0c1e57f8: Pull complete
Digest: sha256:c2f1d5a9c0a81350fa0ad7e1eee99e379d75fe53823d44b5469eb2eb6092c941
Status: Downloaded newer image for daocloud.io/library/centos:7
查看一下本地镜像:
[root@docker ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
daocloud.io/library/centos 7 b5b4d78bc90c 2 months ago 203MB
在拉取回来的本地镜像执行命令:
万年不变的"你好世界":
# docker run daocloud.io/library/centos:7 /bin/echo "hello world"
hello world
使用容器中的shell:
[root@docker ~]# docker run -i -t centos /bin/bash
Unable to find image 'centos:latest' locally
Trying to pull repository docker.io/library/centos ...
注意上面这样是不行的,因为默认使用的是docker官方默认镜像库的位置,需要按如下命令执行:
[root@docker ~]# docker run -i -t daocloud.io/library/centos /bin/bash
-i 捕获标准输入输出
-t 分配一个终端或控制台
进去之后可以在里面执行其他命令
[root@f87252fd8a0b /]# ls
anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@f87252fd8a0b /]# df -h #查看镜像本身的磁盘分区
Filesystem Size Used Avail Use% Mounted on
overlay 10G 5.1G 5.0G 51% /
tmpfs 64M 0 64M 0% /dev
tmpfs 487M 0 487M 0% /sys/fs/cgroup
shm 64M 0 64M 0% /dev/shm
/dev/mapper/centos-root 10G 5.1G 5.0G 51% /etc/hosts
tmpfs 487M 0 487M 0% /proc/asound
tmpfs 487M 0 487M 0% /proc/acpi
tmpfs 487M 0 487M 0% /proc/scsi
tmpfs 487M 0 487M 0% /sys/firmware
镜像管理
搜索镜像:
这种方法只能用于官方镜像库
搜索基于centos操作系统的镜像
# docker search centos
按星级搜索镜像:
查找star数至少为100的镜像,默认不加s选项找出所有相关nginx镜像
# docker search nginx -f stats=100
拉取镜像:
# docker pull centos
查看本地镜像:
# docker image list
查看镜像详情:
# docker image inspect 镜像id
删除镜像:
删除一个或多个,多个之间用空格隔开,可以使用镜像名称或id
# docker rmi daocloud.io/library/centos:7
强制删除: --force
如果镜像正在被使用中,可以使用–force强制删除
# docker rmi daocloud.io/library/centos:7 --force
删除所有镜像:
# docker rmi $(docker images -q)
只查看所有镜像的id:
# docker images -q
查看镜像制作的过程:
相当于dockfile
# docker history daocloud.io/library/centos:7
使用GitHub的软件查看镜像
登陆网址: https://github.com
搜索下载dive,按照文档操作
容器管理
创建新容器但不启动:
# docker create -it daocloud.io/library/centos:7 /bin/bash
创建并运行一个新的Docker容器:
同一个镜像可以启动多个容器,每次执行run子命令都会运行一个全新的容器
# docker run -it --restart=always centos /bin/bash
如果执行成功,说明CentOS容器已经被启动,并且应该已经得到了 bash 提示符.
-i #捕获标准输入输出
-t #分配一个终端或控制台
--restart=always
#容器随docker engine自启动,因为在重启docker的时候默认容器都会被关闭,也适用于create选项
--rm
#默认情况下,每个容器在退出时,它的文件系统都会保存下来,这样一方面调试会方便些,因为你可以通过查看日志等方式来确定最终状态。另一方面,也可以保存容器所产生的数据。
#但是当你仅仅需要短暂的运行一个容器,并且这些数据不需要保存,你可能就希望Docker能在容器结束时自动清理其所产生的数据,这个时候就需要--rm参数了,注意:--rm 和 -d 不能共用
[root@docker setup]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
60cdb7a5dc67 b5b4d78bc90c "/bin/bash" 21 hours ago Exited (137) 21 hours ago jolly_ganguly
f87252fd8a0b daocloud.io/library/centos:7 "/bin/bash" 21 hours ago Exited (137) 21 hours ago busy_newton
c832ef4c8a67 daocloud.io/library/centos:7 "/bin/bash" 21 hours ago Up 21 hours serene_pare
7a4cdb0922ba daocloud.io/library/centos:7 "/bin/bash" 21 hours ago Exited (0) 21 hours ago festive_pare
d9b498fca7e8 daocloud.io/library/centos:7 "/bin/echo 'hello wo…" 21 hours ago Exited (0) 21 hours ago thirsty_ishizaka
[root@docker setup]# docker rm 60cdb7a5dc67
60cdb7a5dc67
[root@docker setup]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f87252fd8a0b daocloud.io/library/centos:7 "/bin/bash" 21 hours ago Exited (137) 21 hours ago busy_newton
c832ef4c8a67 daocloud.io/library/centos:7 "/bin/bash" 21 hours ago Up 21 hours serene_pare
7a4cdb0922ba daocloud.io/library/centos:7 "/bin/bash" 21 hours ago Exited (0) 21 hours ago festive_pare
d9b498fca7e8 daocloud.io/library/centos:7 "/bin/echo 'hello wo…" 21 hours ago Exited (0) 21 hours ago thirsty_ishizaka
[root@docker setup]#
若要断开与容器的连接,并且关闭容器:
容器内部执行如下命令
[root@c832ef4c8a67 /]# exit
如果只想断开和容器的连接而不关闭容器
快捷键: ctrl+p+q
查看容器
只查看运行状态的容器:
# docker ps
查看所有容器 -a参数
# docker ps -a
只查看所有容器id:
# docker ps -a -q
列出最近一次启动的容器:
# docker ps -l
查看容器详细信息
# inspect Return low-level information on a container or image
用于查看容器的配置信息,包含容器名、环境变量、运行命令、主机配置、网络配置和数据卷配置等
目标:
查找某一个运行中容器的id,然后使用docker inspect命令查看容器的信息
提示:
可以使用镜像id的前面部分,不需要完整的id
[root@docker setup]# docker inspect f87
[
{
"Id": "f87252fd8a0b25669b65ce4df41b93ca02433428f3588eae67489796ac9c8d56",
"Created": "2020-07-23T15:34:55.068769829Z",
"Path": "/bin/bash",
"Args": [],
"State": {
"Status": "exited",
"Running": false,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 0,
"ExitCode": 137,
"Error": "",
"StartedAt": "2020-07-23T15:34:55.723390279Z",
"FinishedAt": "2020-07-23T15:45:26.811653475Z"
},
··· ···
比如:容器里在安装ip或ifconfig命令之前,查看网卡IP显示器IP地址和端口号,如果输出是空的说明没有配置IP地址(不同的Docker容器可以通过此IP地址相互访问)
# # docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器id
# docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' $INSTANCE_ID
# docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' f87252fd8a0b
22/tcp -> 20020
找出特殊的端口映射:
比如找到容器里22端口所映射的docker本机的端口:
# docker inspect --format='{{(index (index .NetworkSettings.Ports "22/tcp") 0).HostPort}}' $INSTANCE_ID
[root@docker setup]# docker inspect --format='{{(index (index .NetworkSettings.Ports "22/tcp") 0).HostPort}}' c832ef4c8a67
--format命令笔记
文档:Docker inspect --format命令笔记.note
链接:http://note.youdao.com/noteshare?id=55f4d6143dabda2035bdf37ff74d2e7e&sub=A4B3693CFA844E8380E80888DE96D2CC
启动容器
# docker start name
关闭容器
# docker stop name
# docker kill name #强制终止容器
杀死所有running状态的容器
# docker kill $(docker ps -q)
stop和kill的区别
docker stop命令给容器中的进程发送SIGTERM信号,默认行为是会导致容器退出,当然,容器内程序可以捕获该信号并自行处理,例如可以选择忽略。而docker kill则是给容器的进程发送SIGKILL信号,该信号将会使容器必然退出。
删除容器
# docker rm 容器id或名称
要删除一个运行中的容器,添加 -f 参数
根据格式删除所有容器:
# docker rm $(docker ps -qf status=exited)
重启容器
# docker restart name
暂停容器
pause --暂停容器内的所有进程
通过docker stats可以观察到此时的资源使用情况是固定不变的,通过docker logs -f也观察不到日志的进一步输出。
恢复容器
unpause --恢复容器内暂停的进程,与pause参数想对应
# docker start infallible_ramanujan //这里的名字是状态里面NAMES列出的名字,这种方式同样会让容器运行在后台
设置容器NAME
# docker run -it --name docktest daocloud.io/library/centos:7 /bin/bash
[root@docker setup]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
03a766e52062 daocloud.io/library/centos:7 "/bin/bash" 42 seconds ago Up 40 seconds docktest
[root@docker setup]# docker stop docktest
docktest
[root@docker setup]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6c68e01c9327 daocloud.io/library/centos:7 "/bin/bash" 37 minutes ago Up 37 minutes festive_mahavira
重新进入容器
[root@docker ~]# docker exec -it 8d037a9c25ba /bin/bash
[root@6c68e01c9327 /]#
让容器运行在后台
**·**如果在docker run后面追加-d=true或者id,那么容器将会运行在后台模式。此时所有I/O数据只能通过网络资源或者共享卷组来进行交互,因为容器不再监听你执行docker run的这个端口命令行窗口,但你可以通过执行docker attach来重新附着到该容器的回话中。注意,容器运行在后台模式下,是不能使用–rm选项的
# docker run -d IMAGE[:TAG] 命令
# docker logs container_id #打印该容器的输出
# docker run -it -d --name mytest docker.io/centos /bin/bash -c "while true; do echo hello world; sleep 2; done"
8d037a9c25ba15f1c7a8b946a2887e9c3e14b56e6a081bb71ef48501b4298fc5
[root@docker ~]# docker logs mytest
hello world
hello world
docker attach container_id #附加该容器的标准输出到当前命令行
[root@docker ~]# docker attach mytest
hello world
hello world
··· ···
此时,ctrl+d等同于exit命令,按ctrl+p+q可以退出到宿主机,而保持container仍然在运行
rename
Rename a container
stats
Display a live stream or a container(s) resource usage statistics
--动态显示容器的资源消耗情况,包括:CPU、内存、网络I/O
port
List port mappings or a specific mapping for the CONTAINER
--输出容器端口与宿主机端口的映射情况
# dokcer port blog
80/tcp -> 0.0.0.0:80
容器blog的内部端口80映射到宿主机的80端口,这样可通过宿主机的80端口查看容器blog提供的服务
连接容器
方法1.attach
# docker attach 容器id //前提是容器创建时必须指定了交互shell
方法2.exec
通过exec命令可以创建两种任务:后台型任务和交互型任务
交互型任务:
# docker exec -it 容器id /bin/bash
[root@6c68e01c9327 /]# ls
后台型任务:
# docker exec 容器id touch /testfile
监控容器的运行
可以使用log、top、events、wait这些子命令
logs:
使用logs命令查看守护式容器
可以通过使用docker logs命令来查看容器的运行日志,其中--tail选项可以指定查看最后几条日志,而-t选项则可以对日志条目附加时间戳。使用-f选项可以跟踪日志的输出,直到手动停止。
# docker logs 容器id/容器名称
# docker logs -f 容器id/容器名称
top:
显示一个运行的容器里面的进程信息
# docker top 容器id/容器名称
events:
Get real time events from the server
实时输出Docker服务器端的事件,包括容器的创建,启动,关闭等
# docker start loving_meninsky
loving_meninsky
# docker events //不同终端操作
2020-07-25T18:50:46.849483194+08:00 container create ea2ac321a75ebf8f7ac58e83dfec85c9317e2fe6dad65cdcad88d4f03a268691 (image=daocloud.io/library/centos:7, name=docker3, org.label-schema.build-date=20200504, org.label-schema.license=GPLv2, org.label-schema.name=CentOS Base Image, org.label-schema.schema-version=1.0, org.label-schema.vendor=CentOS, org.opencontainers.image.created=2020-05-04 00:00:00+01:00, org.opencontainers.image.licenses=GPL-2.0-only, org.opencontainers.image.title=CentOS Base Image, org.opencontainers.image.vendor=CentOS)
2020-07-25T18:50:46.853079529+08:00 container attach ea2ac321a75ebf8f7ac58e83dfec85c9317e2fe6dad65cdcad88d4f03a268691 (image=daocloud.io/library/centos:7, name=docker3, org.label-schema.build-date=20200504, org.label-schema.license=GPLv2, org.label-schema.name=CentOS Base Image, org.label-schema.schema-version=1.0, org.label-schema.vendor=CentOS, org.opencontainers.image.created=2020-05-04 00:00:00+01:00, org.opencontainers.image.licenses=GPL-2.0-only, org.opencontainers.image.title=CentOS Base Image, org.opencontainers.image.vendor=CentOS)
wait
Block until a container stops, the print its exit code
--捕获容器停止时的退出码
执行此命令后,该命令会"hang"在当前终端,直到容器停止,此时,会打印出容器的退出码
# docker wait 01d8aa //不同终端操作
137
diff
查看容器内发生改变的文件,以elated_lovelace容器为例
[root@ea2ac321a75e setup]# touch c.txt
用diff查看:
包括文件的创建、删除和文件内容的改变都能看到
[root@docker ~]# docker diff 容器id/名称
A /home/setup/c.txt
C对应的文件内容的改变,A对应的均是文件或者目录的创建删除
[root@docker ~]# docker diff docker3
C /home
A /home/setup
A /home/setup/c.txt
宿主机和容器之间相互COPY文件
cp的用法如下:
Usage: docker cp [OPTIONS] CONTAINER:PATH LOCALPATH
docker co [OPTIONS] LOCALPATH CONTAINER:PATH
如:容器mysql中/usr/local/bin/存在docker-entrypoint.sh文件,可如下方式copu到宿主机
# docker cp mysql:/usr/local/bin/docker-entrypoint.sh /root
修改完毕后,将该文件重新copy回容器
# docker cp /root/docker-entrypoint.sh mysql:/usr/local/bin/
容器打包
将容器的文件系统打包成tar文件,也就是把正在运行的容器直接导出为tar包的镜像文件
export
–Export a container’s filesystem as a tar archive
有两种方式(elated_lovelace为容器名):
第一种:
[root@docker ~]# docker export -o elated_lovelace.tar elated_lovelace
第二种:
[root@docker ~]# docker export 容器名称 > 镜像.tar
导入镜像归档文件到其他宿主机:
import
–Import the contents from a tarball to create a filesystem image
# docker import elated_lovelace.tar elated_lovelace:v1
镜像迁移
保存一台宿主机上的镜像为tar文件,然后可以导入到其他的宿主机上:
save
Save an image(s) to a tar archive
将镜像打包,与下面的load命令相对应
# docker save -o nginx.tar nginx
load
Load an image from a tar archive or STDIN
与上面的save命令相对应,将上面save命令打包的镜像通过load命令导入
# docker load < nginx.tar
容器迁移
# docker export 6c68e01c9327 | gzip > mynginx123.tar
# zcat mynginx123.tar | docker import - mynginx123
评论区