目录
一、国内源安装新版docker
1、删除已安装的Docker
2、配置阿里云Docker Yum源
3、安装Docker服务
4、启动Docker服务
5、问题解决
二、生产docker的环境配置
三、国内源(加速器)
四、镜像管理
1、搜索镜像
2、拉取镜像
3、查看镜像
4、删除镜像
四、容器管理
1、创建新容器
2、断开容器连接
3、查看容器
4、查看容器详细信息
5、启动容器
6、关闭容器
7、删除容器
8、重启容器
9、暂停容器
10、恢复容器
11、后台运行容器
12、连接容器
13、监控容器的运行
14、宿主机和容器之间相互COPY文件
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.com/docker/docker-ce上获取。
要使用收费的docker,从https://www.docker.com/products/docker-enterprise上获取。
docker-ce的发布计划
v1.13.1之后,发布计划更改为:
Edge: 月版本,每月发布一次,命名格式为YY.MM,维护到下个月的版本发布
Stable: 季度版本,每季度发布一次,命名格式为YY.MM,维护4个月
一、国内源安装新版docker
1、删除已安装的Docker
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
2、配置阿里云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
3、安装Docker服务
查看Docker版本
yum list docker-ce --showduplicates
安装较旧版本
需要指定完整的rpm包的包名,并且加上--setopt=obsoletes=0 参数
yum install -y --setopt=obsoletes=0 \
docker-ce-17.03.2.ce-1.el7.centos.x86_64 \
docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch
安装Docker新版本
加上rpm包名的版本号部分或不加都可以
yum -y install docker-ce-18.03.0.ce
或者
yum -y install docker-ce
4、启动Docker服务
systemctl enable docker
systemctl start docker
查看docker版本状态
docker -v
查看docker运行状态
docker info
5、问题解决
报错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-iptables = 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 daocloud.io on 192.168.1.2:53: read udp 192.168.1.189:41335->192.168.1.2:53: i/o timeout
解决2
把DNS改成8.8.8.8问题就解决了,ping百度也秒出结果
vim /etc/resolv.conf
nameserver 8.8.8.8
二、生产docker的环境配置
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://pilvpemn.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
注意:一定注意编码问题,出现错误---查看命令:journalctl -amu docker 即可发现错误
三、国内源(加速器)
Docker 加速器
使用 Docker 的时候,需要经常从官方获取镜像,但是由于显而易见的网络原因,拉取镜像的过程非常耗时,严重影响使用 Docker 的体验。因此 DaoCloud 推出了加速器工具解决这个难题,通过智能路由和缓存机制,极大提升了国内网络访问 Docker Hub 的速度,目前已经拥有了广泛的用户群体,并得到了 Docker 官方的大力推荐。
Docker 加速器对 Docker 的版本有要求吗?
需要 Docker 1.8 或更高版本才能使用,如果您没有安装 Docker 或者版本较旧,请安装或升级。
Docker 加速器支持什么系统?
Linux, MacOS 以及 Windows 平台。
Docker 加速器是否收费?
DaoCloud 为了降低国内用户使用 Docker 的门槛,提供永久免费的加速器服务,请放心使用。
阿里云:搜索镜像,点击“容器镜像服务ACR”,点击“管理控制台”进入阿里云镜像源
四、镜像管理
1、搜索镜像
这种方法只能用于官方镜像库
搜索基于 centos 操作系统的镜像
docker search centos
按星级搜索镜像
查找 star 数至少为 100 的镜像,默认不加 s 选项找出所有相关 ubuntu 镜像
docker search ubuntu -f stars=100
2、拉取镜像
docker pull centos
3、查看镜像
查看本地镜像
docker image list
查看镜像详情
docker image inspect 镜像id
查看镜像制作的过程
相当于dockfile
docker history daocloud.io/ubuntu
4、删除镜像
删除一个或多个,多个之间用空格隔开,可以使用镜像名称或id
docker rmi daocloud.io/library/mysql
强制删除(--force)
如果镜像正在被使用中可以使用--force强制删除 18.07版本后不支持强制删除
docker rmi docker.io/ubuntu:latest --force
删除所有镜像
docker rmi $(docker images -q)
四、容器管理
1、创建新容器
创建新容器但不启动
docker create -it daocloud.io/library/centos:5 /bin/bash
创建并运行一个新Docker 容器
同一个镜像可以启动多个容器,每次执行run子命令都会运行一个全新的容器
docker run -it --restart=always centos:7 /bin/bash
如果执行成功,说明CentOS 容器已经被启动,并且应该已经得到了 bash 提示符。
-i
捕获标准输入输出
-t
分配一个终端或控制台
--restart=always
容器随docker engine自启动,因为在重启docker的时候默认容器都会被关闭,也适用于create选项
--rm
默认情况下,每个容器在退出时,它的文件系统也会保存下来,这样一方面调试会方便些,因为你可以通过查看日志等方式来确定最终状态。另一方面,也可以保存容器所产生的数据。
但是当你仅仅需要短暂的运行一个容器,并且这些数据不需要保存,你可能就希望Docker能在容器结束时自动清理其所产生的数据。这个时候就需要--rm参数了。注意:--rm 和 -d不能共用
2、断开容器连接
断开与容器的连接,并且关闭容器
容器内部执行下面的命令:
exit
只断开和容器的连接而不关闭容器
快捷键:ctrl+p+q
3、查看容器
只查看运行状态的容器
docker ps
查看所有容器
docker ps -a
只查看所有容器id
docker ps -aq
列出最近一次启动的容器
docker ps -l
4、查看容器详细信息
查找某一个运行中容器的id,然后使用docker inspect命令查看容器的信息
可以使用镜像id的前面部分,不需要完整的id
docker inspect d95
5、启动容器
docker start name
6、关闭容器
docker stop name
强制终止容器
docker kill name
杀死所有running状态的容器
docker kill $(docker ps -q)
stop和kill的区别:
docker stop命令给容器中的进程发送SIGTERM信号,默认行为是会导致容器退出,当然,容器内程序可以捕获该信号并自行处理,例如可以选择忽略。而docker kill则是给容器的进程发送SIGKILL信号,该信号将会使容器必然退出。
7、删除容器
docker rm 容器id或名称
要删除一个运行中的容器,添加 -f 参数
根据格式删除所有容器
docker rm $(docker ps -qf status=exited)
8、重启容器
docker restart name
9、暂停容器
暂停容器内的所有进程
docker pause name
通过docker stats可以观察到此时的资源使用情况是固定不变的,通过docker logs -f也观察不到日志的进一步输出
10、恢复容器
恢复容器内暂停的进程,与pause参数相对应
docker unpause name
docker start infallible_ramanujan
//这里的名字是状态里面NAMES列列出的名字,这种方式同样会让容器运行在后台
11、后台运行容器
如果在docker run后面追加-d=true或者-d,那么容器将会运行在后台模式。此时所有I/O数据只能通过网络资源或者共享卷组来进行交互。因为容器不再监听你执行docker run的这个终端命令行窗口。但你可以通过执行docker attach来重新附着到该容器的回话中。
注意:容器运行在后台模式下,是不能使用--rm选项的
docker run -d IMAGE
打印该容器的输出
docker logs container_id
12、连接容器
方法1.attach
docker attach 容器id
//前提是容器创建时必须指定了交互shell
方法2.exec
通过exec命令可以创建两种任务:后台型任务和交互型任务
交互型任务:
# docker exec -it 容器id /bin/bash
root@68656158eb8e:/# ls后台型任务:
# docker exec 容器id touch /testfile
13、监控容器的运行
可以使用logs、top、events、wait这些子命令
13.1使用logs命令查看守护式容器
可以通过使用docker logs命令来查看容器的运行日志,其中--tail选项可以指定查看最后几条日志,而-t选项则可以对日志条目附加时间戳。使用-f选项可以跟踪日志的输出,直到手动停止
# docker logs App_Container //不同终端操作
# docker logs -f App_Container
13.2 top:显示一个运行的容器里面的进程信息
# docker top birdben/ubuntu:v1
13.3 events:实时输出Docker服务器端的事件,包括容器的创建,启动,关闭等
# docker start loving_meninsky
# docker events //不同终端操作
13.4 捕捉容器停止时的退出码
执行此命令后,该命令会"hang"在当前终端,直到容器停止,此时,会打印出容器的退出码
# docker wait 01d8aa //不同终端操作
137
14、宿主机和容器之间相互COPY文件
容器mysql中/usr/local/bin/存在docker-entrypoint.sh文件,可如下方式copy到宿主机
docker cp mysql:/usr/local/bin/docker-entrypoint.sh /root
修改完毕后,将该文件重新copy回容器
docker cp /root/docker-entrypoint.sh mysql:/usr/local/bin/