简介
Docker 是一个开源的应用容器引擎,具有部署简易、沙箱隔离、轻量、可移植等特点,以管理应用程序相同的方式来管理基础架构,达到快速交付和部署代码的目的。
安装:https://docs.docker.com/engine/install/ubuntu/
阿里云镜像加速:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
Docker 架构
- 镜像(Image):将软件环境打包好的模板,用来创建容器
- 容器(Container):容器是镜像运行时的实体,可以被创建、启动、停止、删除等,容器与容器之间相互隔离
- Docker daemon:Docker守护进程
- Docker Client:Docker命令行工具,与Docker daemon进行通信并返回结果给用户
- 仓库(Repository):用来保存镜像
常用命令
1、下载镜像
docker pull 镜像名:TAG
# Tag表示版本,有些镜像的版本显示latest,为最新版本
2、查看镜像
docker images
# 查看本地所有镜像
3、删除镜像
docker rmi -f 镜像ID或者镜像名:TAG
# 删除指定本地镜像
# -f 表示强制删除
4、运行
docker run --name 容器名 -i -t -p 主机端口:容器端口 -d -v 主机目录:容器目录:ro 镜像ID或镜像名:TAG
# --name 指定容器名,可自定义,不指定自动命名
# -i 以交互模式运行容器
# -t 分配一个伪终端,即命令行,通常-it组合来使用
# -p 指定映射端口,讲主机端口映射到容器内的端口
# -d 后台运行容器
# -v 指定挂载主机目录到容器目录,默认为rw读写模式,ro表示只读
例-运行redis:
docker run -p 6379:6379 --name redis -v /docker/redis/data:/data -v /docker/redis/conf/redis.conf:/etc/redis/redis.conf -d redis redis-server /etc/redis/redis.conf
5、容器列表
docker ps -a -q
# docker ps查看正在运行的容器
# -a 查看所有容器(运行中、未运行)
# -q 只查看容器的ID
6、启动/停止容器
docker start 容器ID或容器名
docker stop 容器ID或容器名
7、删除容器
docker rm -f 容器ID或容器名
# -f 表示强制删除
8、查看日志
docker logs 容器ID或容器名
9、进入容器
docker exec -it 容器ID或者容器名 /bin/bash
# 进入正在运行的容器并且开启交互模式终端
# /bin/bash是固有写法,作用是因为docker后台必须运行一个进程,否则容器就会退出,在这里表示启动容器后启动bash。
# 也可以用docker exec在运行中的容器执行命令
Dockerfile
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
Dockerfile常用指令
命令 | 用途 |
---|---|
FROM | 基础镜像文件 |
RUN | 构建镜像阶段执行命令 |
ADD <src> <dest> | 添加文件,从src目录复制文件到容器的dest,其中src可以是Dockerfile所在目录的相对路径,也可以是一个URL,还可以是一个压缩包 |
COPY | 拷贝文件,和ADD命令类似,但不支持URL和压缩包 |
CMD | 容器启动后执行命令 |
EXPOSE | 声明容器在运行时对外提供的服务端口 |
WORKDIR | 指定容器工作路径 |
ENV | 指定环境变量 |
ENTRYPOINT | 容器入口,CMD指令的目的一样,都是指定Docker容器启动时执行的命令,可多次设置,但只有最后一个有效 |
USER | 用于设置启动镜像时的用户或者UID,写在该指令后的 RUN、CMD以及ENTRYPOINT指令都将使用该用户执行命令 |
VOLUME | 指定挂载点,该指令使容器中的一个目录具有持久化存储的功能,该 目录可被容器本身使用,也可共享给其他容器。当容器中的应用有持 久化数据的需求时可以在 Dockerfile中使用该指令。格式为: VOLUME["/data"] |
RUN命令在image文件的构建阶段执行,执行结果都会打包进入image文件;CMD命令则是在容器启动后执行。另外,一个Dockerfile可以包含多个RUN命令,但是只能有一个CMD命令。
指定了CMD命令以后,docker container run命令就不能附加命令了(比如前面的/bin/bash),否则它会覆盖CMD命令。
构建镜像
在 Dockerfile 文件的存放目录下,执行构建动作
docker build -t 镜像名:TAG .
# 最后一个.表示上下文路径,该路径下的文件会被一起打包
Docker Compose
Docker Compose可以轻松、高效地管理容器,通过docker-compose.yml定义和运行多容器的Docker应用。
docker-compose.yml常用指令
- image:指定镜像名或者镜像id
- build:指定Dockerfile文件的路径
- external_links:链接到docker-compose.yml外部的容器
- ports:暴露端口信息
- expose:暴露端口
- volumes:卷挂载路径
- environment:环境变量
- net:设置网络模式
使用Docker Compose
-
docker-compose up
:以依赖性顺序启动服务 -
docker-compose stop
:按依赖关系顺序停止服务