Docker 命令手册

Docker 基本信息

查看docker的环境信息

Client:
 Debug Mode: false

Server:
 Containers: 13
  Running: 0
  Paused: 0
  Stopped: 13
 Images: 11
 Server Version: 18.09.8
 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 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-957.el7.x86_64
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 4
 Total Memory: 7.638GiB
 Name: centos.7
 ID: ENUP:FRWW:DLYA:HYWF:P2L4:QN65:E5MZ:H3U2:QCWT:GV7M:AWQM:QKSR
 Docker Root Dir: /cloud/docker
 Debug Mode: false
 Username: smhwzf
 Registry: https://index.docker.io/v1/
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Live Restore Enabled: false
 Product License: Community Engine

备注:如上结果比较清晰不做过多解释,唯一注明:Docker Root Dir 是在daemon中设置了-g 参数

查看docker及API对应信息

Client: Docker Engine - Community
 Version:           19.03.8
 API version:       1.39 (downgraded from 1.40)  
 Go version:        go1.12.17
 Git commit:        afacb8b
 Built:             Wed Mar 11 01:27:04 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.8
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.8
  Git commit:       0dd43dd
  Built:            Wed Jul 17 17:10:42 2019
  OS/Arch:          linux/amd64
  Experimental:     false

镜像操作类

搜索镜像

 命令:docker search

 样例:docker search mysql –no-trunc=true 
 备注:
     搜索mysql镜像,不要截断日志

拉取镜像

 命令:docker pull registry:latest 或者如下命令等效
        docker pull registry
 备注:
    拉取最新版本的registry镜像

查询本地镜像

 命令: docker images

镜像打标签

 命令:docker tag
 样例:docker tag 141d24fea983 mysql:5.6
 备注:
     141d24fea983 为mysql镜像的ID

删除镜像

 命令:docker rmi 
 样例:docker rmi mysql:5.6
 备注:
     5.6为mysql的版本,也就是tag

导出镜像

 命令:docker save
 样例:docker save -o registry-2.0.tar 10.1.163.22:5000/registry:2.0
 备注:
     -o 表示导出
     registry-2.0.tar 表示导出到本地的包名

导入镜像

 命令:docker load
 样例:docker load -i registry-2.0.tar
 备注:
     -i 表示导入
     registry-2.0.tar 存在本机的镜像tar包

容器操作类

创建容器

 命令:docker create
 样例:docker create busybox:1.24-uclibc
 备注:
     busybox:1.24-uclibc 镜像名称,如果您时初学者,请提前拉到本地

启动容器

 命令:docker start 
 样例:docker start 77eb8d8a0b0a
 备注:
     77eb8d8a0b0a 通过docker create创建的容器

运行容器

 命令:docker run
 样例:docker run -itd --network host -p 5000:5000 -v /registry:/data/registry --name registry-2 registry:2.0
 备注:
     -v 表示目录映射,以":"号分割,前面的时宿主机目录,后面的时容器内目录

查看容器

 命令:docker ps
 样例:docker ps -a -s
 备注:
     -a 表示查看所有的容器,包括已经退出的
     -s 容器大小;size-可写层大小;virtual-共享只读层大小+可写层大小

查看容器日志

 命令:docker logs
 样例:docker logs 容器id

查看最后100行日志

输出100行日志,并动态展示最新日志

查询最近20分钟的日志

查询最近3个小时的日志

查询从2020年1月1日12点开始的日志

打印日志的详细时间

查询到2020年1月1日12点截止的日志(2020年1月1日12点之前的日志)

进入容器

 命令:docker exec
 样例:docker exec -it b991e7560c22 /bin/sh
 备注:
     -it 打开 pseudo-TTY交互式标准输入
     b991e7560c22 容器ID

停止容器

 命令:docker stop
 样例:docker stop b991e7560c22
 备注:
     b991e7560c22 容器ID

杀掉容器

 命令:docker kill
 样例:docker kill b991e7560c22
 备注:
     b991e7560c22 容器ID
     与docker stop的区别是:kill更暴力,直接杀,stop会发送term信号给容器

删除容器

 命令:docker rm
 样例:docker rm b991e7560c22
 备注:
     b991e7560c22 容器ID,如果容器处于运行中,不允许删除,如果非要强制删除,先不告诉你,这么干很危险

查看容器详情

 命令:docker inspect 
 样例:docker inspect b991e7560c22
 备注:
     b991e7560c22 容器ID

查看容器状态

 命令:docker stats
 样例:docker stats 
 备注:
     显示所有容器的资源使用情况

查看日志驱动

 docker info --format '{{.LoggingDriver}}'

查看当前容器的日志驱动

 docker inspect -f '{{.HostConfig.LogConfig.Type}}' <CONTAINER>

导出容器

 命令:docker export 
 样例:docker export -o nginx-paas-1.0-c.tar 2866b6fa6e25
 备注:
     2866b6fa6e25 容器ID

     export 与save的区别:export将容器导出为一个文件,丢失所有元数据和历史纪录;save会保存所有的历史纪录

导入容器

 命令:docker import 
 样例:docker import nginx-paas-1.0-c.tar 10.1.163.22:5000/nginx-paas:1.0
 备注:
     nginx-paas-1.0-c.tar 本地tar包
     10.1.163.22:5000/nginx-paas:1.0 镜像名称 

     import与load的区别:load从save保存的文件导入为一个新的镜像;import 从import导出的文件导入为一个新的镜像

场景演练

部署基于tomcat的应用,通过ngnx做负载均衡,后端访问mysql数据库,所有组件全部运行与docker容器中。

Nginx:负载均衡 Tomcat:应用运行环境,应用war包: Mysql:支撑应用的数据库

nginx 容器化

命令 备注
docker pull nginx 获取基础镜像
docker tag 66216d141be6 nginx:1.0 重新命名
cd /data/abner/images/nginx
docker build –t nginx-paas:1.0 . 构建镜像
docker run -itd -p 19090:9090 nginx-paas:1.0 启动nginx容器

nginx Dockerfile

 FROM 10.1.163.22:5000/nginx:1.0
 ADD nginx.conf  /etc/nginx
 RUN chmod +x /etc/nginx/nginx.conf
 EXPOSE 9090

 CMD ["nginx", "-c","/etc/nginx/nginx.conf","-g", "daemon off;"]

其中,nginx.conf文件如下:

 user nginx;
 worker_processes  1;
 pid /var/run/nginx.pid;

 events {
 worker_connections 1024;
 }

 http {
 include       /etc/nginx/mime.types;
        default_type  application/octet-stream;

        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                       '$status $body_bytes_sent "$http_referer" '
                       '"$http_user_agent" "$http_x_forwarded_for"';

        access_log  /var/log/nginx/access.log  main;
        sendfile        on;
        keepalive_timeout  65;
        upstream lb.tomcat.com {
                 server 10.1.163.27:18080 weight=1;
                 server 10.1.163.32:18080 weight=1;
 }
 server {
 listen 9090;
               server_name 10.1.163.22;
 location / {
                         root  html;
                         index  index.html index.htm;
                         proxy_pass http://lb.tomcat.com;
 }
 }
 }

tomcat容器化

运行在10.1.163.32上的为原生的tomcat(包含自带测试war包),名字:10.1.163.22:5000/tomcat:8.5

运行在10.1.163.27上的为基于原生tomcat构建的新的tomcat,名字: 10.1.163.22:5000/tomcat-27:8.5

  备注:
    再构建新的tomcat镜像:10.1.163.22:5000/tomcat-27:8.5的原因如下;
    * 明确怎么编写tomcat的Dockerfile构建tomcat镜像;
    * 在nginx做负载均衡可以区别10.1.163.32上的tomcat;
    * 10.1.163.27上访问tomcat会显示自己的IP地址。

在10.1.163.22主机上执行

命令 备注
docker pull tomcat 获取基础镜像
docker tag 0fbedce2f08c 10.1.163.22:5000/tomcat:8.5 镜像重命名
docker push 10.1.163.22:5000/tomcat:8.5 推入仓库
docker run -itd -p 18080:8080 10.1.163.22:5000/tomcat:8.5 启动tomcat容器

在10.1.163.32主机上执行

命令 备注
docker pull 10.1.163.22:5000/tomcat:8.5 获取基础镜像
docker run -itd -p 18080:8080 10.1.163.22:5000/tomcat:8.5 启动tomcat容器

在10.1.163.27上执行

命令 备注
docker pull 10.1.163.22:5000/tomcat:8.5 获取基础镜像
cd /data/abner/tomcat/ && docker build –t 10.1.163.22:5000/tomcat-27:8.5 重新命名
docker run -itd -p 18080:8080 10.1.163.22:5000/tomcat:8.5 启动tomcat容器
FROM 10.1.163.22:5000/tomcat:8.5
ADD index.html  /usr/local/tomcat/webapps/examples
RUN chmod +x /usr/local/tomcat/webapps/examples/index.html
expose 8080
<title>
    tomcat-8.5
</title>
<head>
    10.1.163.27
</head>
<body>
  <h1> I am running in docker</h1>
</body>


Mysql 容器化

命令 备注
docker pull percona 获取dockerhub的percona版本mysql镜像
docker tag 888d359bd25f 10.1.163.22:5000/percona-mysql:5.7 重命名便于推入仓库
docker run -itd -e DATADIR=/data/mysql_data -p 13306:3306 -e MYSQL_ROOT_PASSWORD=Abner@123 -e MYSQL_USER=trd -e MYSQL_PASSWORD=Trd@123 -v /data/mysql_data:/data/mysql_data --name paas-mysql 10.1.163.22:5000/percona-mysql:5.7 启动数据库,用户名/密码:root/Abner@123 用户名/密码:trd/Trd@123