docker命令手册

基础命令

1
2
3
4
5
6
#启动docker
sudo service docker start
# 重启docker
sudo service docker restart
# 停止docker
sudo service docker stop

镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 获取所有镜像
docker images
# 搜索镜像
docker search [image name] --limit 5
# 拉取镜像
docker pull 镜像名称
# 比如
docker pull ubuntu
docker pull ubuntu:16.04
# 个人镜像
docker pull 仓库名称/镜像名称
docker pull xunmi/django
# 第三方仓库拉取
docker pull 第三方仓库地址/仓库名称/镜像名称
docker pull hub.c.163.com/library/mysql:latest
(默认仓库名为library,所有从官方获取镜像相当于`sudo docker image pull library/镜像名称`)
# 删除镜像
docker image rm 镜像名或镜像ID 或 docker rmi 镜像名或镜像ID
docker image rm hello-world
docker rmi 9e64176cd8a2
  • 标签 含义
    REPOSITORY 镜像所在的仓库名称
    TAG 镜像标签
    IMAGEID 镜像ID
    CREATED 镜像的创建日期(不是获取该镜像的日期)
    SIZE 镜像大小

加载镜像

  • docker run [可选参数] 镜像名 [向启动容器中传入的命令]
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
      + -i	表示以《交互模式》运行容器。
    + -d 会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器)。
    + -t 表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
    + –name 为创建的容器命名。(默认会随机给名字,不支持中文字符!!!)
    + -v 表示目录映射关系,即宿主机目录:容器中目录。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
    + -p 表示端口映射,即宿主机端口:容器中端口。 比如:-p 8080:80 就是将容器中的80端口,映射到主机中的8080端口
    + –network=host 表示将主机的网络环境映射到容器中,使容器的网络与主机相同。每个 Docker 容器都有自己的网络连接空间连接到虚拟 LAN。使用此命令则会让容器和主机共享一个网络空间。
    ### 提交镜像
    + ```shell
    # 提交容器副本使之成为一个新的镜像
    docker commit -m="描述信息" -a="作者" 容器ID 要创建的目标镜像名字:[标签名]
    # 阿里云地址 : https://cr.console.aliyun.com/repository/cn-hangzhou/xiangyu23/base/details
    # psuh 到阿里云
    docker login --username=向什么来着 registry.cn-hangzhou.aliyuncs.com
    docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/xiangyu23/base:[镜像版本号]
    docker push registry.cn-hangzhou.aliyuncs.com/xiangyu23/base:[镜像版本号]
    # pull 阿里云

容器

  • # 查看当前所有正在运行的容器
    docker ps
    # 查看当前所有的容器
    docker ps -a
    # 使用过滤器(除了name外,常用的还可以指定id:id= 、所有停止的容器:status=exited,正在运行的容器:status=running 等)
    docker ps -f name=指定的名字
    # 显示2个上次创建的容器(2可以改变)
    docker ps -n 2
    # 显示最新创建的容器(包括所有状态)
    docker ps -l
    # 仅显示ID
    docker ps -q
     # 显示容器大小 
    docker ps -s
    
    # 启动和关闭
    # 启动容器
    docker run 容器名或容器id
    docker start  --name[指定名称] 容器名或容器id
    -d : 后台运行容器并返回容器ID
    -i : 交互模式运行容器
    -t : 为容器分配一个伪输入终端,通常与-i同时使用,也即启动交互式容器
    -P : (大写)随机端口映射
    -p : 指定端口映射   8080:80 暴露端口:内部的映射端口
    docker run是利用镜像生成容器,并启动容器,而docker start是启动一个之前生成过的容器
    # 停止容器
    docker stop   容器名或容器id
    # 强制关闭容器
    docker kill 容器名或容器id
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      
    ### 容器交互
    + ```shell
    # 启动容器的交互终端
    docker exec -it 容器名或容器id 执行的命令
    + 启动后用exit退出不会关闭容器
    # 退出容器但是不关闭容器
    Ctrl+P+Q


    # 从容器拷贝文件到主机
    docker cp 容器ID:容器路径 目的主机路径
  • exec 可选参数
    -d 会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器)。
    -e 设置环境变量
    -i 表示以《交互模式》运行容器。
    -t 表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
    -u 设置用户名和UID。
    -w 设置容器内的工作目录。

容器监控

  •  # 查看日志
    docker logs 容器ID
    docker top 容器ID
    # 细致的查看容器的情况
    docker inspect 容器ID
    
    1
    2
    3
    4
    5
    6
    7
    ### 导出导出容器
    + ```shell
    # 导出容器的内容流作为一个tar归档文件
    docker export 容器ID > 文件名.tar
    # 从tar包中的内容创建一个新的文件系统再导入为镜像
    cat 文件名.tart | docker import -镜像用户/镜像名:镜像版本号

数据卷

  • # docker 挂载主机目录访问如果出现cannot open directory : Permission denied 
    在挂载目录后面多加一个 --privileged=true 参数
    
    # 挂载数据卷
    docker run -d --privileged=true -v [宿主机路径]:[容器内路径] [镜像名]
    
    docker run -d --privileged=true -v D:\docker\shareFile:[容器内路径]:rw  [镜像名]
    # 默认是RW,可以读和写,如果限制容器只有读取权限的话要改成ro
    
    # 容器间继承卷的规则
    docker run -d --privileged=true --volumes-from [继承的镜像名]  [运行的镜像名]
    
    1
    2
    3
    4
    5
    6
    ### 网络查看
    + ```shell
    # 查看当前容器ID的端口
    docker inspect --format={{.NetworkSettings.IPAddress}} [容器ID]

    docker network inspect [网络名称]

常用中间件的安装

  • mysql

    • docker run 
      -p 3306:3306 
      --privileged=true 
      -v D:\docker\dockerFile\mysql\log:/var/log/mysql
      -v D:\docker\dockerFile\mysql\data:/var/lib/mysql
      -v D:\docker\dockerFile\mysql\conf:/etc/mysql/conf.d
      --name xyMysql 
      -e env LANG=C.UTF-8
      -e MYSQL_ROOT_PASSWORD=xiangyu9527
      mysql:5.7
      
      
      docker run -d -p 3306:3306 --privileged=true -v D:\docker\dockerFile\mysql\log:/var/log/mysql -v D:\docker\dockerFile\mysql\data:/var/lib/mysql -v D:\docker\dockerFile\mysql\conf:/etc/mysql/conf.d --name xyMysql -e MYSQL_ROOT_PASSWORD=xiangyu9527 -e LANG=C.UTF-8 -e LC_ALL=C.UTF-8 mysql:5.7
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      + 主从Mysql
      + ```shell
      docker run
      -d
      -p 3307:3306
      --privileged=true
      -v D:\docker\dockerFile\mysqlMaster\log:/var/log/mysql
      -v D:\docker\dockerFile\mysqlMaster\data:/var/lib/mysql
      -v D:\docker\dockerFile\mysqlMaster\conf:/etc/mysql/conf.d
      --name mysqlMaster
      -e MYSQL_ROOT_PASSWORD=root
      mysql:5.7

      docker run -d -p 3307:3306 --privileged=true -v D:\docker\dockerFile\mysqlMaster\log:/var/log/mysql -v D:\docker\dockerFile\mysqlMaster\data:/var/lib/mysql -v D:\docker\dockerFile\mysqlMaster\conf:/etc/mysql/conf.d --name mysqlMaster -e MYSQL_ROOT_PASSWORD=root mysql:5.7


      #设置用户权限
      create user 'slave'@'%' identified by '123456';
      GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

      docker run
      -d
      -p 3308:3306
      --privileged=true
      -v D:\docker\dockerFile\mysqlSlave\log:/var/log/mysql
      -v D:\docker\dockerFile\mysqlSlave\data:/var/lib/mysql
      -v D:\docker\dockerFile\mysqlSlave\conf:/etc/mysql/conf.d
      --name mysqlSlave
      -e MYSQL_ROOT_PASSWORD=root
      mysql:5.7

      docker run -d -p 3308:3306 --privileged=true -v D:\docker\dockerFile\mysqlSlave\log:/var/log/mysql -v D:\docker\dockerFile\mysqlSlave\data:/var/lib/mysql -v D:\docker\dockerFile\mysqlSlave\conf:/etc/mysql/conf.d --name mysqlSlave -e MYSQL_ROOT_PASSWORD=root mysql:5.7


      # 从机配置
      change master to master_host='172.17.0.2' , master_user='slave',master_password='123456',master_port=3306,master_log_file='mall-mysql-bin.000001',master_log_pos=617,master_connect_retry=30;


  • redis

    • docker run 
      -d
      -p 6379:6379
      --privileged=true 
      -v D:\docker\dockerFile\redis\redis.conf:/etc/redis/redis.conf
      -v D:\docker\dockerFile\redis\data:/data
      --name xyRedis 
      redis:6.0.8
      redis-server /etc/redis/redis.conf
      
      docker run -d -p 6379:6379 --privileged=true -v D:\docker\dockerFile\redis\redis.conf:/etc/redis/redis.conf -v D:\docker\dockerFile\redis\data:/data --name xyRedis redis:6.0.8 redis-server /etc/redis/redis.conf
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      + 集群
      + ```shell
      docker run
      -d
      --name redis-node-1
      --net host
      --privileged=true
      -v D:\docker\dockerFile\redisNode1\data:/data
      redis:6.0.8
      --cluster-enabled yes
      --appendonly yes
      --port 6381
  • rockertmq

    • 安装namesrv
    • docker run -d
      --restart=always
      --name rmqnamesrv
      --privileged=true
      -p 9876:9876
      -v D:\docker\dockerFile\rocketMQ\data\namesrv\logs:/root/logs 
      -v D:\docker\dockerFile\rocketMQ\data\namesrv\store:/root/store 
      -e "MAX_POSSIBLE_HEAP=100000000"
      -e "JAVA_OPT_EXT=-Xms512M -Xmx512M -Xmn128m"
      apache/rocketmq
      sh mqnamesrv
      
      
      docker run -d --restart=always --name rmqnamesrv --privileged=true -p 9876:9876 -v D:\docker\dockerFile\rocketMQ\data\namesrv\logs:/root/logs  -v D:\docker\dockerFile\rocketMQ\data\namesrv\store:/root/store  -e "MAX_POSSIBLE_HEAP=100000000" -e "JAVA_OPT_EXT=-Xms512M -Xmx512M -Xmn128m" apache/rocketmq sh mqnamesrv
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
        
      + broker

      + ```shell
      docker run -d
      --restart=always
      --name rmqbroker
      --link rmqnamesrv:namesrv
      -p 10911:10911
      -p 10909:10909
      -v D:\docker\dockerFile\rocketMQ\data\broker\logs:/root/logs
      -v D:\docker\dockerFile\rocketMQ\data\broker\store:/root/store
      -v D:\docker\dockerFile\rocketMQ\data\broker\conf\broker.conf:/home/rocketmq/rocketmq-4.9.4/conf/broker.conf
      -e "NAMESRV_ADDR=namesrv:9876"
      -e "JAVA_OPT_EXT=-Xms512M -Xmx512M -Xmn128m"
      -e "MAX_POSSIBLE_HEAP=200000000"
      apache/rocketmq
      sh mqbroker -c /home/rocketmq/rocketmq-4.9.2/conf/broker.conf

      docker run -d --restart=always --name rmqbroker --link rmqnamesrv:namesrv -p 10911:10911 -p 10909:10909 -v D:\docker\dockerFile\rocketMQ\data\broker\logs:/root/logs -v D:\docker\dockerFile\rocketMQ\data\broker\store:/root/store -v D:\docker\dockerFile\rocketMQ\data\broker\conf\broker.conf:/home/rocketmq/rocketmq-4.9.4/conf/broker.conf -e "NAMESRV_ADDR=namesrv:9876" -e "JAVA_OPT_EXT=-Xms512M -Xmx512M -Xmn128m" -e "MAX_POSSIBLE_HEAP=200000000" apache/rocketmq sh mqbroker -c /home/rocketmq/rocketmq-4.9.2/conf/broker.conf
      + config + ``` brokerClusterName = DefaultCluster brokerName = broker-a brokerId = 0 deleteWhen = 04 fileReservedTime = 48 brokerRole = ASYNC_MASTER flushDiskType = ASYNC_FLUSH brokerIP1 = 127.0.0.1 diskMaxUsedSpaceRatio=95
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
        


      + consloe

      + ```shell
      docker run -d
      --restart=always
      --name rmqadmin
      -e "JAVA_OPTS=-Drocketmq.namesrv.addr=127.0.0.1:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false"
      -p 8085:8080
      --ulimit nofile=1024
      styletang/rocketmq-console-ng:latest

      docker run -d --restart=always --name rmqadmin -e "JAVA_OPTS=-Drocketmq.namesrv.addr=127.0.0.1:9876 -Dcom.rocketmq.sendMessageWithVIPChannel=false" -p 8085:8080 --ulimit nofile=1024
      styletang/rocketmq-console-ng:latest

Dockerfile

  • # 通过dockerfile 构建镜像
    docker build -t contosjava8:1.0 .
    # -f [文件路径]  可以指定文件路径
    

docker命令手册
https://x-leonidas.github.io/2023/03/17/15云和容器/docker命令手册/
作者
听风
发布于
2023年3月17日
更新于
2023年5月13日
许可协议