写给自己看的docker笔记

227 阅读4分钟

docker hub:hub.docker.com/r/easymock/…

Docker守护进程运行在主机上,然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。容器,是一个运行时环境。

docker镜像加速:

docker常用命令

帮助命令

docker version

docker info

docker --help

镜像命令

docker images

# 显示本地所有镜像,包括中间映像层
docker images -a

# 只显示镜像ID
docker images -q

查找镜像

docker search hello-world

docker search -s 30 hello-world

拉取镜像

docker pull tomcat
# 等价于
docker pull tomcat:latest

删除镜像

docker rmi -f tomcat:1.0.0

docker rmi -f tomcat:latest hello-world:latest

# 删除本地全部镜像
docker rmi -f $(docker images -qa)

容器命令

新建并启动一个容器:

docker run hello-world <options>

-d 后台运行容器,并返回容器id
-p 3306:3306 主机端口映射容器端口
-e 设置环境变量
--name con_mysql 为容器指定一个名称
-v 本地路径:容器路径
-i 以交互模式运行容器,通常与-t同时使用
-t 为容器重新分配一个伪输入终端

列出容器

# 列出当前正在运行的容器
docker ps

# 列出当前正在运行的容器和运行过的容器
docker ps -a

启动和停止容器

docker start <容器id>

# 重启
docker restart <容器id>

docker stop <容器名字>

# 强制停止
docker kill <容器名字>

# 删除容器
docker rm <容器id>

查看容器

# 查看容器日志
docker logs <options> <容器id>

# 查看容器内运行的进程
docker top <容器id>

# 查看容器内部细节
docker inspect <容器id>

重新进入容器

docker attach <容器id>

docker exec -it <容器id> /bin/bash

docker exec -t <容器id> whereis ls

从容器内拷贝文件

docker cp <容器id>:<容器路径> 目的主机路径

生成新的镜像 docker commit

容器数据卷

  1. 数据卷可在容器之间共享数据
  2. 卷中的更改可以直接生效
  3. 数据卷中的更改不会包含在镜像的更新中
  4. 数据卷的生命周期一直持续到没有容器使用它为止

使用命令添加数据卷

docker run -v <本地路径>:<容器路径> <镜像名字>

dockerfile

每条dockerfile保留字指令必须为大写字母,指令从上到下顺序执行。

FROM scratch
MAINTAINER The CentOS Project <cloud-ops@centos.org>
ADD c68-docker.tar.xz /
LABEL name="CentOS Base Image" \
    vender="CentOS" \
    license="GPLv2"
    build-date="2016-06-02"

# Default command
CMD ["/bin/bash"]

保留字指令:

  • FROM:基础镜像
  • MAINTAINER:镜像维护者的姓名和邮箱地址
  • RUN:容器构建时需要运行的命令
  • EXPOSE:当前容器对外暴露的端口
  • WORKDIR:指定在创建容器后,终端默认登陆进去的工作目录
  • ENV:在构建镜像过程中设置环境变量
  • ADD:将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
  • COPY:把构建上下文目录中的文件/目录复制到新的一层的镜像内
  • VOLUME:容器数据卷
  • CMD:指定容器启动时要运行的命令,多个CMD指令只有最后一个会生效
  • ENTRYPOINT:和CMD基本一样,多个ENTRYPOINT指令不会覆盖只会追加

docker-compose

用于定义和运行多容器Docker应用程序的工具。

使用步骤:

  1. 使用Dockerfile定义应用程序的环境
  2. 使用docker-compose.yml定义构成应用程序的服务,这样它们可以在隔离环境中一起运行
  3. 最后执行docker-compose up来启动运行整个应用。

docker-compose.yml配置文件

version: '3'

services:
  mongodb: # 一个service就是一个container
    image: mongo:3.4.1
    volumes: # 数据持久化
      # ./data/db 数据库文件存放地址,根据需要修改为本地地址
      - './data:/data'
    networks:
      - easy-mock
    restart: always

  web:
    image: easymock/easymock:1.6.0
    command: /bin/bash -c "npm start"
    ports:
      - 7300:7300
    volumes:
      # 日志地址,根据需要修改为本地地址
      - './logs:/home/easy-mock/easy-mock/logs'
      # 配置地址,请使用本地配置地址替换
      - './production.json:/home/easy-mock/easy-mock/config/production.json'
    networks:
      - easy-mock
    restart: always

networks:
  easy-mock: