Docker命令全集

Docker

Posted by Monk on April 1, 2020

Docker 全攻略


一. docker的优缺点

  1. docker优点:
    • Docker的资源利用率比传统的虚拟机更高
    • Docker支持跨节点部署
    • 版本可控,组件可复用
    • 共享镜像
    • 轻量,易维护
  2. docker缺点:
    • 宿主资源没有完全做到隔离
    • Golang语言尚未成熟

————————-Docker—————————-
docker 运行MySQL服务:docker run --name pwc-mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:5.7 运行该命令可能会报错:/usr/bin/docker-current: Error response from daemon: Conflict. The container name “/mysql-server” is already in use by container bdc8d8c475cb86695c466d23fd7102221f2c040898c2d576f94cd06c93ca811b. You have to remove (or rename) that container to be able to reuse that name..
解决办法:使用命令:docker ps -l 列出容器中已经存在的mysql,然后使用docker run CONTAINER ID 运行即可

一. Docker命令:

镜像相关

  1. docker search java: 搜索存放在Docker Hub中的镜像,关键词为 java
  2. docker pull java: 从Docker Registry上下载镜像
    • eg: docker pull reg.itmuch.com/java:7: 下载标签为7的镜像
  3. docker images: 列出下载的镜像
  4. docker rmi [OPTIONS] IMAGE [IMAGE...]: 删除指定镜像
    • eg1:docker rmi hello-world 删除名称为hello-world的镜像
    • eg2:docker rmi -f $(docker images) 删除所有镜像 -f 强制删除

启动,停止docker

  1. 启动:systemctl start docker
  2. 守护进程重启: sudo systemctl daemon-reload
  3. 重启docker服务: systemctl restart docker或者sudo service docker restart
  4. 关闭docker服务:service docker stop或者systemctl stop docker

容器相关

  1. docker run [OPTIONS] IMAGE [COMMAND] [ARG...]:新建并启动一个容器
    参数列表:
    • -d:后台运行
    • -p:随机端口映射
    • -p:指定端口映射(四种方式)
      1. ip:hostPort:containerPort
      2. ip::containerPort
      3. hostPort:containerPort
      4. containerPort
    • –network:指定网络模式
      1. –network=bridge 连接到默认的网桥
      2. –network=host 容器使用宿主机的网络
      3. –network=container:NAME_or_ID 告诉docker让新建的容器使用已有容器的网络配置
      4. –network=none 不配置该容器的网络,用户可以自定义网络配置
        • eg1:docker run java /bin/echo “Hello World” 和在本地执行 echo 一样
        • eg2:docker run -d -p 91:80 nginx args:-d 后台运行 -p宿主机端口:容器端口 # 开放容器端口到宿主机端口
  2. docker ps 列出容器
  3. docker stop dafaf2ba6b34 根据容器ID来停止实例
  4. docker kill dafaf2ba6b34 强制停止容器
  5. docker start [OPTIONS] CONTAINER [CONTAINER...] 启动一个或多个已经停止的镜像
  6. docker restart [OPTIONS] CONTAINER [CONTAINER...] 重启容器,应该配合 –time参数,避免死锁
  7. docker attach dafaf2ba6b34 进入容器 (不推荐使用)
  8. nsenter 进入容器 - 用法:docker inspect --format "" $CONTAINER_ID 来获取PID - docker inspect --format "" dafaf2ba6b34 得到 12248 - nsenter --target 12248 --mount --uts --ipc --net --pid 即可进入容器 #### 进入容器 docker exec -it 00f02d814a42 /bin/bash

  9. docker rm dafaf2ba6b34 删除容器 如果要删除正在运行的容器 加入-f参数 - 删除所有容器 docker rm -f $(docker ps -a -q)
  10. docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] 基于现有镜像重新构建镜像
  11. docker create [OPTIONS] IMAGE [COMMAND] [ARG...] 基于现有image模板创建容器,但是不允许容器(和run的区别)
  12. docker diff CONTAINER 检查容器文件系统上的更改
  13. docker exec [OPTIONS] CONTAINER COMMAND [ARG...] 在运行的容器中运行指令
  14. docker history [OPTIONS] IMAGE 返回image在构建过程中所有执行过的命令
  15. docker inspect [OPTIONS] NAME|ID [NAME|ID...] 探查docker的信息(容器信息,镜像信息)
  16. docker kill [OPTIONS] CONTAINER [CONTAINER...] kill容器
  17. docker logs [OPTIONS] CONTAINER 打印容器内部的日志
  18. docker rename CONTAINER NEW_NAME 对容器重命名
  19. docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG] 对image重命名
  20. docker stats [OPTIONS] [CONTAINER...] 对容器的资源进行监控
  21. docker top CONTAINER [ps OPTIONS] 统计容器内运行的进程信息
  22. docker search redis 从官网搜索redis的镜像

  23. docker login 登录到Docker仓库
  24. docker logout 注销

  25. docker export redis-mm > latest.tar 将名称为redis-mm的容器导出
  26. docker inport latest.tar 将从tar包中导入容器

  27. docker pause CONTAINER [CONTAINER...] 暂停容器,但不停止容器
  28. docker port CONTAINER [PRIVATE_PORT[/PROTO]] 显示容器所暴露的端口

补充

  • docker build -t friendlyname .# 使用此目录的 Dockerfile 创建镜像
  • docker run -p 4000:80 friendlyname # 运行端口 4000 到 90 的“友好名称”映射
  • docker run -d -p 4000:80 friendlyname # 内容相同,但在分离模式下
  • docker ps # 查看所有正在运行的容器的列表
  • docker stop <hash> # 平稳地停止指定的容器
  • docker ps -a # 查看所有容器的列表,甚至包含未运行的容器
  • docker kill <hash> # 强制关闭指定的容器
  • docker rm <hash> # 从此机器中删除指定的容器
  • docker rm $(docker ps -a -q) # 从此机器中删除所有容器
  • docker images -a # 显示此机器上的所有镜像
  • docker rmi <imagename> # 从此机器中删除指定的镜像
  • docker rmi $(docker images -q) # 从此机器中删除所有镜像
  • docker login # 使用您的 Docker 凭证登录此 CLI 会话
  • docker tag <image> username/repository:tag # 标记 <image> 以上传到镜像库
  • docker push username/repository:tag # 将已标记的镜像上传到镜像库
  • docker run username/repository:tag # 运行镜像库中的镜像

二 Dockerfile

Dockerfile 内置的命令及其作用

内置命令 作用
FROM 指明基础镜像的名称。(必填项)
MAINTAINER 可用于提供作者、版本及其他备注信息。(可选项)
RUN 用于执行后面的命令。当RUN执行完毕,将产生一个新的文件层。(可选项)
CMD 指定此镜像启动时默认执行命令。(可选项)
LABEL 用于在镜像中添加元数据。例如版本号、构建日期等。(可选项)
EXPOSE 用于指定需要暴露的网络端口号。(可选项)
ENV 用于在镜像中添加环境变量。(可选项)
ADD 向镜像中添加新文件或者新目录。(可选项)
COPY 从主机向镜像复制文件。(可选项)
ENTRYPOINT 在镜像中设定默认执行的二进制程序。(可选项)
VOLUME 向镜像中挂载一个卷组。(可选项)
USER 在镜像构建过程中,生成或切换到另外一个用户。(可选项)
WORKDIR 设定此镜像后续操作的默认工作目录。(可选项)
ONBUILD 配置构建触发指令集。(可选项)

Dockerfile 常用指令 格式为: 指令名称 参数

  1. ADD 复制文件:从src目录复制文件到dest目录
    • ADD <src>… <dest>
    • ADD [”<src>”,…”<dest>”]
    • eg: ADD hello.jar world.jar 将hello.jar 复制为world.jar
  2. ARG 设置构建参数
    • ARG类似于ENV,ARG设置的是构建时的环境变量,在运行时不会存在
    • eg:ARG user1=someUser
  3. CMD 容器启动命令:CMD指令用于为执行容器提供默认值。每个Dockerfile只有一个CMD命令,如果有多个,那么只有最后一条被执行。
    • eg:CMD echo “This is a test.” wc -
  4. COPY 复制文件:和ADD类似,COPY不支持URL和压缩包
    • COPY <src>… <dest>
    • COPY [”<src>”,…”<dest>”]
  5. ENTRYPOINT 入口点:和CMD命令一样,指定docker容器启动时执行的命令,可多次设置,但只有最后一个有效

  6. ENV 设置环境变量
    • ENV <key> <value>
    • ENV <key>=<value>
    • eg:ENV JAVA_HOME /path/to/java
  7. EXPOSE 声明暴露的端口 EXPOSE <port> [<port>…]
    • eg1:单个端口
      • 1.EXPOSE port1
      • 2.docker run -p port1 image 等价于:docker run -P image
    • eg2:多个端口
      • 1.EXPOSE port1 port2 port3
      • 2.docker run -p port1 -p port2 -p port3 image
      • 3.也可以指定需要映射到宿主机器上的端口号
      • 3.1 docker run -p host_port1:port1 -p host_port2:port2 -p host_port3:port3 image
  8. FROM 指定基础镜像,必须写在所有指令的前面
    • eg1:FROM <image>
    • eg1:FROM <image>:<tag>
    • eg1:FROM <image>@<digest>
  9. LABEL 为镜像添加元数据
    • eg: LABEL version=1.0
  10. MAINTAINER 指定维护者信息
    • eg : MAINTAINER Monk<guangliang1120@gmail.com>
  11. RUN 执行命令 RUN [“/bin/bash”, -c, “echo hello”]

  12. USER 设置用户:用于设置启动镜像时的用户或者UID,写在该指令后的RUN,CMD以及ENTRYPOINT指令都使用该用户执行命令
    • eg:USER daemon
  13. VOLUME 指定挂载点 提供持久化存储
    • eg:VOLUME /data
  14. WORKDIR 指定工作目录,写在该指令后的RUN,CMD以及ENTRYPOINT指令都将该目录作为当前目录
    • eg:WORKDIR /path/to/workdir

三:Docker-compose

概念:docker-compose是编排容器的。例如,你有一个php镜像,一个mysql镜像,一个nginx镜像。如果没有docker-compose, 那么每次启动的时候,你需要敲各个容器的启动参数,环境变量,容器命名,指定不同容器的链接参数等等一系列的操作,相当繁琐。 而用了docker-composer之后,你就可以把这些命令一次性写在docker-composer.yml文件中, 以后每次启动这一整个环境(含3个容器)的时候,你只要敲一个docker-composer up命令就ok了。