目录

一、国内源安装新版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/