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
容器数据卷
- 数据卷可在容器之间共享数据
- 卷中的更改可以直接生效
- 数据卷中的更改不会包含在镜像的更新中
- 数据卷的生命周期一直持续到没有容器使用它为止
使用命令添加数据卷
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应用程序的工具。
使用步骤:
- 使用Dockerfile定义应用程序的环境
- 使用docker-compose.yml定义构成应用程序的服务,这样它们可以在隔离环境中一起运行
- 最后执行
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: