侧边栏壁纸
博主头像
zyixin

当你觉得为时已晚的时候,恰恰是最早的时候

  • 累计撰写 64 篇文章
  • 累计创建 0 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

Docker安装部署及命令

zyixin
2022-04-07 / 0 评论 / 0 点赞 / 1,770 阅读 / 17,308 字
温馨提示:
本文最后更新于 2022-04-07,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

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
0

评论区