准备

yum install docker-ce //yum 安装,建议centos7以上系统使用
docker version //查看版本


服务启动

systemctl start docker-ce //启动服务
systemctl enable docker-ce //设置开机启动
systemctl is-enabled docker-ce //查看是否开机启动


docker命令

  1. $ sudo docker # docker 命令帮助
  2. Commands:
  3. attach Attach to a running container # 当前 shell 下 attach 连接指定运行镜像
  4. build Build an image from a Dockerfile # 通过 Dockerfile 定制镜像
  5. commit Create a new image from a container's changes # 提交当前容器为新的镜像
  6. cp Copy files/folders from the containers filesystem to the host path # 从容器中拷贝指定文件或者目录到宿主机
  7. create Create a new container # 创建一个新的容器,同 run,但不启动容器
  8. diff Inspect changes on a container's filesystem # 查看 docker 容器变化
  9. events Get real time events from the server # 从 docker 服务获取容器实时事件
  10. exec Run a command in an existing container # 在已存在的容器上运行命令
  11. export Stream the contents of a container as a tar archive # 导出容器的内容流作为一个 tar 归档文件[对应 import ]
  12. history Show the history of an image # 展示一个镜像形成历史
  13. images List images # 列出系统当前镜像
  14. import Create a new filesystem image from the contents of a tarball # 从tar包中的内容创建一个新的文件系统映像[对应 export]
  15. info Display system-wide information # 显示系统相关信息
  16. inspect Return low-level information on a container # 查看容器详细信息
  17. kill Kill a running container # kill 指定 docker 容器
  18. load Load an image from a tar archive # 从一个 tar 包中加载一个镜像[对应 save]
  19. login Register or Login to the docker registry server # 注册或者登陆一个 docker 源服务器
  20. logout Log out from a Docker registry server # 从当前 Docker registry 退出
  21. logs Fetch the logs of a container # 输出当前容器日志信息
  22. port Lookup the public-facing port which is NAT-ed to PRIVATE_PORT # 查看映射端口对应的容器内部源端口
  23. pause Pause all processes within a container # 暂停容器
  24. ps List containers # 列出容器列表
  25. pull Pull an image or a repository from the docker registry server # 从docker镜像源服务器拉取指定镜像或者库镜像
  26. push Push an image or a repository to the docker registry server # 推送指定镜像或者库镜像至docker源服务器
  27. restart Restart a running container # 重启运行的容器
  28. rm Remove one or more containers # 移除一个或者多个容器
  29. rmi Remove one or more images # 移除一个或多个镜像[无容器使用该镜像才可删除,否则需删除相关容器才可继续或 -f 强制删除]
  30. run Run a command in a new container # 创建一个新的容器并运行一个命令
  31. save Save an image to a tar archive # 保存一个镜像为一个 tar 包[对应 load]
  32. search Search for an image on the Docker Hub # 在 docker hub 中搜索镜像
  33. start Start a stopped containers # 启动容器
  34. stop Stop a running containers # 停止容器
  35. tag Tag an image into a repository # 给源中镜像打标签
  36. top Lookup the running processes of a container # 查看容器中运行的进程信息
  37. unpause Unpause a paused container # 取消暂停容器
  38. version Show the docker version information # 查看 docker 版本号
  39. wait Block until a container stops, then print its exit code # 截取容器停止时的退出状态值

常用命令

文件拷贝

docker cp

  1. docker cp /www/runoob 96f7f14e99ab:/www/ //将主机/www/runoob目录拷贝到容器96f7f14e99ab的/www目录下
  2. docker cp /www/runoob 96f7f14e99ab:/www //将主机/www/runoob目录拷贝到容器96f7f14e99ab中,目录重命名为www
  3. docker cp 96f7f14e99ab:/www /tmp/ //将容器96f7f14e99ab的/www目录拷贝到主机的/tmp目录中
  4. 例子:
  5. docker cp tst-mongodb-qa:/data/db /data/db/mongodb //将/data/db目录下的文件,拷贝到/data/db/mongodb

docker镜像

docker search lnmp //默认官方镜像仓库docker.io
docker search -s 10 lnmp (-s 收藏次数,10次以上)

  1. [root@rd-2 ~]# docker search lnmp
  2. INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
  3. docker.io docker.io/imagine10255/centos6-lnmp-php56 centos6-lnmp-php56 27 [OK]
  4. docker.io docker.io/domainer/centos-lnmp 5 [OK]
  5. docker.io docker.io/twang2218/lnmp-nginx 这是 LNMP 示例中的 nginx 镜像 5 [OK]
  6. docker.io docker.io/maxwhale/lnmp-docker LNMP Docker 3 [OK]
  7. docker.io docker.io/maxwhale/ubuntu14-lnmp1.2 Ubuntu14.04 lnmp1.2 3 [OK]
  8. docker.io docker.io/akel/lnmp-base Base Centos7 image with Nginx + PHP-FPM an... 2 [OK]
  9. docker.io docker.io/duckll/lnmp webservice 2 [OK]
  1. <br />下载镜像<br />docker pull 仓库地址/仓库名/镜像名:标签(版本号)<br />docker pull lnmp //默认官方镜像仓库[docker.io](http://docker.io/)<br />docker pull ifintech/rap<br />docker pull[registry.hub.docker.com/ubuntu:latest](http://registry.hub.docker.com/ubuntu:latest) <br />查看,更改,删除镜像<br />docker images 查看镜像<br />docker image ls //docker-ce<br />docker image ls -f dangling=true //显示虚悬镜像
[root@rd-2 ~]# docker images
REPOSITORY                                                     TAG                 IMAGE ID            CREATED             SIZE
registry.cn-hangzhou.aliyuncs.com/youtu-image/hangzhou-youtu   1.0                 631c90f85faf        15 hours ago        2.048 GB
youtu/xjzx-rap                                                 latest              631c90f85faf        15 hours ago        2.048 GB
docker.io/ifintech/rap                                         latest              d38b38ed850a        8 days ago          1.934 GB
docker.io/tramasoli/centos7-ssh                                latest              4785f90cef42        4 months ago        264.3 MB

docker inspect 镜像ID //查看镜像详情
docker tag 原镜像名称 新镜像名称 //更改镜像标记(镜像名,版本号)
docker tag 镜像ID 新镜像名称
docker rmi 镜像ID //删除镜像,必须先删除容器
dicker image prune //删除虚悬镜像(仓库名和标签均为的镜像)

创建容器

Docker run :创建一个新的容器并运行一个命令

语法
- docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS说明:
 -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
 -d: 后台运行容器,并返回容器ID;
 -i: 以交互模式运行容器,通常与 -t 同时使用;
 -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
 -it 配置新终端使用,如:docker exec -it  nginx bash  
 --name="nginx-lb": 为容器指定一个名称;
 --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
 --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
 -h "mars": 指定容器的hostname;
 -e username="ritchie": 设置环境变量;
 --env-file=[]: 从指定文件读入环境变量;
 --cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
 -m :设置容器使用内存最大值;
 --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/Container: 四种类型;
 --link=[]: 添加链接到另一个容器;
 --expose=[]: 开放一个端口或一组端口;
 -v:挂载目录“-v 宿主目录:容器目录"
--restart 字符串在容器退出时应用的重新启动策略(默认为“no”, 开机启动“always”)

实例

  1. 使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。

-docker run —name mynginx -d nginx:latest

  1. 使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。

    docker run -P -d nginx:latest

  2. 使用镜像nginx:latest以后台模式启动一个容器,将容器的80端口映射到主机的80端口,主机的目录/data映射到容器的/data。

docker run -p 80:80 -v /data:/data -d nginx:latest

  1. 使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。

    docker run -it nginx:latest /bin/bash

docker run -itd 镜像名称(REPOSITORY:TAG)
docker run -itd -p 8888:8080 —name xjzx-rap ifintech/rap //映射端口(本地端口:容器端口),容器命名,对于已安装服务的容器
docker run -itd -p 8877:8080 —name xjzx-rap2 —restart always youtu/xjzx-rap //定义容器开机启动

查看,启动容器

docker ps //查看运行的容器
docker ps -a //查看所有容器
docker inspect 容器ID //查看容器详情
docker start/stop/restart 容器ID //启动,停止,重启容器
docker restart $(docker ps -aq) 容器所有容器
docker container stop/start/restart 容器名称
docker rm 容器ID //删除容器(必须先停止容器)
docker rm $(docker ps -a -q) //删除所有容器(容器内的文件更改和新增数据将全部丢失)

进入容器

docker exec -it 容器ID /bin/bash
可以执行命令,脚本,安装软件,修改文件等等,取决与镜像
docker attach 容器ID //退出及容器停止

保存已修改的容器

docker commit 614122c0aabbyoutu/xjzx-rap //指定了要提交的修改过的容器的ID、目标镜像仓库、镜像名
指定更多信息来描述所做的修改(用-m指定行创建的镜像的提交信息。—author指定镜像作者,接着是容器ID、目标镜像仓库、镜像名)

docker commit -m='centos7 rap0.14 20170706' --author='wangwei' b569 youtu/xjzx-rap
[root@rd-1 ~]# docker ps
CONTAINER ID        IMAGE                                                    COMMAND             CREATED             STATUS              PORTS                    NAMES
386eac740fb1       registry.cn-hangzhou.aliyuncs.com/youtu-image/rap:0.14   "/etc/rc.local"     19 minutes ago      Up About a minute   0.0.0.0:8888->8080/tcp   xjzx-rap
[root@rd-1 ~]#docker commit 386e xjzx/rap:1.14
sha256:a5aa196df3b79b457b906368ff59f257929fb72f28c425f1bdf72c258557ba98
[root@rd-1 ~]# docker images
REPOSITORY                                          TAG                 IMAGE ID            CREATED             SIZE
xjzx/rap                                            1.14                a5aa196df3b7        3 minutes ago       2.207 GB
registry.cn-hangzhou.aliyuncs.com/youtu-image/rap   0.14                631c90f85faf        20 hours ago        2.048 GB

推送镜像到仓库

启动基础镜像,进入容器安装服务,并启动。

[root@rd-2 app]# docker ps
CONTAINER ID        IMAGE                             COMMAND                  CREATED             STATUS              PORTS                    NAMES
fd4a856c9a31       daocloud.io/centos:6              "/bin/bash"              5 hours ago         Up 5 hours                                 centos6_app

进入容器安装tomcat,并启动,创建启动脚本

vim /run.sh
#!/bin/bash
/bin/bash -D &     //基础镜像启动的命令
/usr/local/tomcat8/bin/catalina.sh run   //新镜像启动的命令

生成新的镜像

docker commit fd4a  youtu/tomcat8
[root@rd-2 local]# docker images
REPOSITORY                                                     TAG                 IMAGE ID            CREATED             SIZE
youtu/tomcat8                                                  latest              5d221fb4783f        28 minutes ago      536.5 MB

启动新的镜像:
docker run -itd —name app2.0 -p 8080:8080 youtu/tomcat8:2.0 /run.sh
验证:

[root@rd-2 app]# netstat -nat|grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN

进入无法启动的镜像

docker run -it —entrypoint sh 4aadoff916b6 sh
image.png

查看容器日志

docker logs 容器id
docker logs —tail 100 容器id (最新100行日志)

docker实战经验

查看容器资源

docker stats   
CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
36c37f2426c7        health-scanner      0.00%               3.051MiB / 7.801GiB   0.04%               304kB / 308kB       0B / 0B             8
e2e26a3c153a        dcar-scanner        0.00%               2.988MiB / 7.801GiB   0.04%               320kB / 319kB       0B / 0B             8
754ec8783005        uic-scanner          0.00%               73.5MiB / 7.801GiB    0.92%               881kB / 1.41MB      459kB / 0B          11
81f6b6aed6b8        uic                        0.01%               345.2MiB / 7.801GiB   4.32%               640MB / 3.92GB      0B / 1.52GB         11

查看docker占用的空间

docker system df   
root@iZwz954id2ypetyalkh65rZ:~# docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              8                   1                   1.359GB             1.201GB (88%)
Containers          1                   1                   2.932GB             0B (0%)
Local Volumes       1                   0                   0B                  0B
Build Cache                                                 0B                  0B

清除所有容器

docker rm $(docker ps -a -q) 
docker image prune 清除所有镜像缓存(临时镜像)
docker rmi $(docker image ls -aq) 清除所有镜像

更变docker镜像存储目录

默认存储目录:/var/lib/docker,更变为:/home/docker/lib/docker

mkdir -p /etc/systemd/system/docker.service.d/

vi /etc/systemd/system/docker.service.d/devicemapper.conf
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --graph=/home/docker/lib/docker


如果授权普通用户所有docker权限,需要将用户加入到docker组

docker守护进程启动的时候,会默认赋予名字为docker的用户组读写Unix socket的权限,因此只要创建docker用户组,并将当前用户加入到docker用户组中,那么当前用户就有权限访问Unix socket了,进而也就可以执行docker相关命令
gpasswd -a $USER docker