你熟悉Docker吗?
文章目录
- 你熟悉Docker吗?
- 快速入门
- Docker安装
- 1.卸载旧版
- 2.配置Docker的yum库
- 3.安装Docker
- 4.启动和校验
- 5.配置镜像加速
- 5.1.注册阿里云账号
- 5.2.开通镜像服务
- 5.3.配置镜像加速
- 部署MySQL
- 镜像和容器
- 命令解读
- Docker基础
- 常用命令
- 数据卷
- 数据卷挂载
- 本地目录挂载
- 自定义镜像
- 镜像结构
- Dockerfile
- 构建镜像
- 容器网络
- 项目部署
- 部署Java
- 部署前端
- DockerCompose
Docker是用来快速构建、运行、管理应用的工具,是用来帮助部署项目及项目所需要依赖的组件。
快速入门
Docker安装
安装教程参考Docker官方文档
1.卸载旧版
首先如果系统中已经存在旧的Docker,则先卸载:
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2.配置Docker的yum库
首先要安装一个yum工具
yum install -y yum-utils
安装成功后(出现 “完毕” 字样),执行命令,配置Docker的yum源:
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
3.安装Docker
最后,执行命令,安装Docker
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
4.启动和校验
# 启动Docker
systemctl start docker
# 停止Docker
systemctl stop docker
# 重启
systemctl restart docker
# 设置开机自启
systemctl enable docker
# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps
5.配置镜像加速
这里以阿里云镜像加速为例。
5.1.注册阿里云账号
首先访问阿里云网站注册一个账号。
5.2.开通镜像服务
在首页的产品中,找到阿里云的容器镜像服务:
点击后进入控制台:
首次可能需要选择立刻开通,然后进入控制台。
5.3.配置镜像加速
找到镜像工具下的镜像加速器:
页面向下滚动,即可找到配置的文档说明:
具体命令如下:
# 创建目录
mkdir -p /etc/docker
# 复制内容,注意把其中的镜像加速地址改成你自己的
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
EOF
# 重新加载配置
systemctl daemon-reload
# 重启Docker
systemctl restart docker
部署MySQL
先停掉虚拟机中的MySQL,确保虚拟机已经安装了Docker,且网络开通的情况下,执行下面的命令即可安装MySQL
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
mysql
镜像和容器
- 利用Docker安装应用时,Docker会自动搜索并下载应用镜像(image)。
- 镜像不仅包含应用本身,还包含应用运行所需要的环境、配置、系统函数库。
- Docker会在运行镜像时创建一个隔离环境,称为容器(container)。
- 存储和管理镜像的服务就是镜像仓库,DockerHub是目前最大的镜像仓库,其中包含各种常见的应用镜像
命令解读
docker run
:创建并运行一个容器,-d
是让容器在后台运行--name mysql
:给容器起个名字,必须唯一-p 3306:3306
:设置端口映射-e KEY=VALUE
:是设置环境变量mysql
:指定运行的镜像的名字- 镜像命名规范:一般分两部分组成:[repository]:[tag]。
repository
是镜像名,tag
是镜像的版本。没有指定tag
时,默认是latest
,代表最新版本的镜像
- 镜像命名规范:一般分两部分组成:[repository]:[tag]。
Docker基础
常用命令
Docker最常见的命令就是操作镜像、容器的命令,详见官方文档
命令 | 说明 |
---|---|
docker pull | 将远端镜像拉取到本地 |
docker images | 查看所有本地镜像 |
docker rmi | 删除指定镜像 |
docker build | 自定义构建镜像 |
docker save | 将打包镜像保存到本地 |
docker load | 加载镜像 |
docker push | 推送本地镜像到远端镜像仓库 |
docker run | 创建并运行容器 |
docker stop | 停止容器 |
docker start | 启动容器 |
docker rm | 删除容器 |
docker ps | 查看当前容器运行状态 |
docker logs | 查看容器日志 |
docker exec | 进入容器内部 |
数据卷
数据卷( volume ):是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁。它将宿主机目录映射到容器内目录,方便操作容器内文件,或者方便迁移容器产生的数据
数据卷挂载
- 在创建容器时,利用
-v 数据卷名:容器内目录
,完成挂载 - 容器创建时,如果发现挂载的数据卷不存在时,会自动创建
命令 | 说明 |
---|---|
docker volume create | 创建数据卷 |
docker volume ls | 查看所有数据卷 |
docker volume rm | 删除指定数据卷 |
docker volume inspect | 查看某个数据卷的详情 |
docker volume prune | 清除数据卷 |
本地目录挂载
- 在执行
docker run
命令时,使用-v 本地目录∶容器内目录
,可以完成本地目录挂载 - 本地目录必须以 “/” 或 “./" 开头,如果直接以名称开头,会被识别为数据卷而非本地目录
-v mysql:/var/lib/mysql
会被识别为一个数据卷叫 mysql-v ./mysql:/var/lib/mysql
会被识别为当前目录下的 mysql目录
自定义镜像
镜像中包含了应用程序所需要的运行环境、函数库、配置、以及应用本身等各种文件。这些文件分层打包而成,构建镜像的过程就是把上述文件打包的过程。
镜像结构
- 入口( Entrypoint ):镜像运行入口,一般是程序启动的脚本和参数
- 层( Layer ):添加安装包、依赖、配置等,每次操作都形成新的一层
- 基础镜像( Baselmage ):应用依赖的系统函数库、环境、配置、文件等
Dockerfile
Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。将来Docker可以根据Dockerfile帮我们构建镜像。常见指令如下:
指令 | 说明 | 示例 |
---|---|---|
FROM | 指定基础镜像 | FROM centos:6 |
ENV | 设置环境变量,可在后面指令使用 | ENV key value |
COPY | 拷贝本地文件到镜像的指定目录 | COPY ./jrell.tar.gz /tmp |
RUN | 执行Linux的shell命令,一般是安装过程的命令 | RUN tar -zxvf /tmp/jrell.tar.gz && EXPORTS path=/tmp/jrell:$path |
EXPOSE | 指定容器运行时监听的端口,是给镜像使用者看的 | EXPOSE 8080 |
ENTRYPOINT | 镜像中应用的启动命令,容器运行时调用 | ENTRYPOINT java -jar xx.jar |
更多详细语法说明,请参考官方文档
举例:
基于Ubuntu基础镜像,利用Dockerfile描述镜像结构
#指定基础镜像
FROM ubuntu:16.04
#配置环境变量,JDK的安装目录、容器内时区
ENV JAVA_DIR=/usr/local
#拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar
#安装JDK
RUN cd $JAVA_DIR \ && tar -xf ./jdk8.tar.gz \ && mv ./jdk1.8.0_144 ./java8
#配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin
#入口,java项目的启动命令
ENTRYPOINT ["java", "-jar", "/app.jar"]
也可以直接基于jdk为基础镜像,省略上述步骤
#指定基础镜像
FROM openjdk:11.0-jre-buster
#拷贝jar包
COPY docker-demo.jar /app.jar
#入口,java项目的启动命令
ENTRYPOINT ["java", "-jar", "/app.jar"]
构建镜像
编写好了Dockerfile,可利用下面的命令来构建镜像
docker build -t myImage:1.0 .
-t
:是给镜像起名,格式依然是repository:tag
的格式,不指定tag
时,默认为latest
.
:是指定Dockerfile所在目录,如果就在当前目录,则指定为 “.”
格式:docker build -t 镜像名 Dockerfile目录
容器网络
默认情况下,所有容器都是以bridge
方式连接到Docker的一个虚拟网桥上:
加入自定义网络的容器才可以通过容器名互相访问,Docker的网络操作命令如下:
命令 | 说明 |
---|---|
docker network create | 创建一个网络 |
docker network ls | 查看所有网络 |
docker network rm | 删除指定网络 |
docker network prune | 清除未使用的网络 |
docker network connect | 使指定容器连接加入某网络 |
docker network disconnect | 使指定容器连接离开某网络 |
docker network inspect | 查看网络详细信息 |
项目部署
部署Java
Dockerfile
#基础镜像
FROM openjdk:11.0-jre-buster
#设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
#拷贝jar包
COPY liner-service.jar /app.jar
#入口
ENTRYPOINT ["java","-jar","/app.jar"]
#构建镜像
docker build -t mall .
#运行镜像
docker run -d --name linmall -p 8080:8080 --network liner mall
部署前端
docker run -d \
--name nginx \
-p 18080:18080 \
-p 18081:18081 \
-v /root/ngin/html:/usr/share/nginx/ html \
-v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \
--rTetwork liner \
nginx
DockerCompose
Docker Compose通过一个单独的docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器,帮助我们实现多个相互关联的Docker容器的快速部署。
docker compose命令格式如下:
docker compose [OPTIONS] [COMMAND]
类型 | 参数或指令 | 说明 |
---|---|---|
Options | -f | 指定compose文件的路径和名称 |
Options | -p | 指定projcct名称 |
Commands | up | 创建并启动所有service容器 |
Commands | down | 停止并移除所有容器、网络 |
Commands | ps | 列出所有启动的容器 |
Commands | logs | 查看指定容器的日志 |
Commands | stop | 停止容器 |
Commands | start | 启动容器 |
Commands | restart | 重启容器 |
Commands | top | 查看运行的进程 |
Commands | exec | 在指定的运行中容器中执行命令 |