目录
一.安装docker
1.卸载旧版
2.配置Docker的yum库
3. 安装Docker
4. 启动和校验
二.部署MySql
三.入门命令解读
四. 常见命令
五. 数据卷
六. 自定义镜像
七. Docker网络
八. Docker Compose
一.安装docker
1.卸载旧版
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
二.部署MySql
我们利用Docker来安装一个MySQL软件,可以对比一下之前传统的安装方式,看看哪个效率更高一些。
如果是利用传统方式部署MySQL,大概的步骤有:
搜索并下载MySQL安装包
上传至Linux环境
编译和配置环境
安装
而使用Docker安装,仅仅需要一步即可,在命令行输入下面的命令(建议采用CV大法):
docker run -d \--name mysql \-p 3306:3306 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=123 \mysql
镜像和容器:
当我们利用Docker安装应用时,Docker会自动搜索并下载应用镜像(image)。镜像不仅包含应用本身,还包含应用运行所需要的环境、配置、系统函数库。Docker会在运行镜像时创建一个隔离环境,称为容器(container)。
镜像仓库:存储和管理镜像的平台,Docker官方维护了一个公共仓库:Docker Hub。
Docker是做什么的?
Docker 可以帮助我们下载应用镜像,创建并运行镜像的容器,从而 快速部署应用什么是镜像?
将应用所需的函数库、依赖、配置等与应用一起打包得到的就是镜像什么是容器?
为每个镜像的应用进程创建的隔离运行环境就是容器
什么是镜像仓库?
存储和管理镜像的服务就是镜像仓库,
三.入门命令解读
-p 3306:3306
: 设置端口映射。
容器是隔离环境,外界不可访问。但是可以将宿主机端口映射容器内到端口,当访问宿主机指定端口时,就是在访问容器内的端口了。
容器内端口往往是由容器内的进程决定,例如MySQL进程默认端口是3306,因此容器内端口一定是3306;而宿主机端口则可以任意指定,一般与容器内保持一致。
格式:
-p 宿主机端口:容器内端口
,示例中就是将宿主机的3306映射到容器内的3306端口
-e TZ=Asia/Shanghai
: 配置容器内进程运行时的一些参数
格式:
-e KEY=VALUE
,KEY和VALUE都由容器内进程决定案例中,
TZ=Asia/Shanghai
是设置时区;MYSQL_ROOT_PASSWORD=123
是设置MySQL默认密码像命名规范:
镜像名称一般分两部分组成:[repository]:[tag]。
其中repository就是镜像名
tag是镜像的版本
在没有指定tag时,默认是latest,代表最新版本的镜像
四. 常见命令
Docker最常见的命令就是操作镜像、容器的命令,详见官方文档: https://docs.docker.com/
其中,比较常见的命令有:
命令 说明 文档地址 docker pull 拉取镜像 docker pull docker push 推送镜像到DockerRegistry docker push docker images 查看本地镜像 docker images docker rmi 删除本地镜像 docker rmi docker run 创建并运行容器(不能重复创建) docker run docker stop 停止指定容器 docker stop docker start 启动指定容器 docker start docker restart 重新启动容器 docker restart docker rm 删除指定容器 docs.docker.com docker ps 查看容器 docker ps docker logs 查看容器运行日志 docker logs docker exec 进入容器 docker exec docker save 保存镜像到本地压缩文件 docker save docker load 加载本地压缩文件到镜像 docker load docker inspect 查看容器详细信息 docker inspect docker commit 提交 docker login 登录 docker tag 命名 docker push 推送
用一副图来表示这些命令的关系:
五. 数据卷
数据卷(volume)是一个虚拟目录,它将宿主机目录映射到容器内目录,方便我们操作容器内文件,或者方便迁移容器产生的数据
如何挂载数据卷?
在创建容器时,利用 -v 数据卷名:容器内目录 完成挂载容器创建时,如果发现挂载的数据卷不存在时,会自动创建以Nginx为例,我们知道Nginx中有两个关键的目录:
html
:放置一些静态资源
conf
:放置配置文件如果我们要让Nginx代理我们的静态资源,最好是放到
html
目录;如果我们要修改Nginx的配置,最好是找到conf
下的nginx.conf
文件。但遗憾的是,容器运行的Nginx所有的文件都在容器内部。所以我们必须利用数据卷将两个目录与宿主机目录关联,方便我们操作。如图:
在上图中:
这样以来,容器内的
我们创建了两个数据卷:
conf
、html
Nginx容器内部的
conf
目录和html
目录分别与两个数据卷关联。而数据卷
conf
和html
分别指向了宿主机的/var/lib/docker/volumes/conf/_data
目录和/var/lib/docker/volumes/html/_data
目录conf
和html
目录就 与宿主机的conf
和html
目录关联起来,我们称为 挂载。此时,我们操作宿主机的/var/lib/docker/volumes/html/_data
就是在操作容器内的/usr/share/nginx/html/_data
目录。只要我们将静态资源放入宿主机对应目录,就可以被Nginx代理了。小提示:
/var/lib/docker/volumes
这个目录就是默认的存放所有容器数据卷的目录,其下再根据数据卷名称创建新目录,格式为/数据卷名/_data
。为什么不让容器目录直接指向宿主机目录呢?
因为直接指向宿主机目录就与宿主机强耦合了,如果切换了环境,宿主机目录就可能发生改变了。由于容器一旦创建,目录挂载就无法修改,这样容器就无法正常工作了。
但是容器指向数据卷,一个逻辑名称,而数据卷再指向宿主机目录,就不存在强耦合。如果宿主机目录发生改变,只要改变数据卷与宿主机目录之间的映射关系即可。
不过,我们发现由于数据卷目录比较深,不好寻找,通常我们也允许让容器直接与宿主机目录挂载而不使用数据卷
数据卷的相关命令有:
命令 说明 文档地址 docker volume create 创建数据卷 docker volume create docker volume ls 查看所有数据卷 docs.docker.com docker volume rm 删除指定数据卷 docs.docker.com docker volume inspect 查看某个数据卷的详情 docs.docker.com docker volume prune 清除数据卷 docker volume prune 注意:容器与数据卷的挂载要在创建容器时配置,对于创建好的容器,是不能设置数据卷的。而且创建容器的过程中,数据卷会自动创建
六. 自定义镜像
镜像就是包含了应用程序、程序运行的系统函数库、运行配置等文件的文件包。构建镜像的过程其实就是把上述文件打包的过程。
Dockerfile:
Dockerfile就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像,利用固定的指令来描述镜像的结构和构建过程。将来Docker可以根据Dockerfile帮我们构建镜像。常见指令如下:
更新详细语法说明,请参考官网文档: Dockerfile reference | Docker Docs
指令 说明 示例 FROM 指定基础镜像 FROM centos:6
ENV 设置环境变量,可在后面指令使用 ENV key value
COPY 拷贝本地文件到镜像的指定目录 COPY ./xx.jar /tmp/app.jar
RUN 执行Linux的shell命令,一般是安装过程的命令 RUN yum install gcc
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为基础镜像,省略前面的步骤:
当编写好了Dockerfile,可以利用下面命令来构建镜像:
docker build -t myImage:1.0 .-t:是给镜像起名,格式依然是repository:tag的格式,不指定tag时,默认为latest .:是指定Dockerfile所在目录,如果就在当前目录,则指定为"."
七. Docker网络
默认情况下,所有容器都是以bridge方式连接到Docker的一个虚拟网桥上:
加入自定义网络的容器才可以通过容器名互相访问,Docker的网络操作命令如下:
命令 说明 文档地址 docker network create 创建一个网络 docker network create docker network ls 查看所有网络 docs.docker.com docker network rm 删除指定网络 docs.docker.com docker network prune 清除未使用的网络 docs.docker.com docker network connect 使指定容器连接加入某网络 docs.docker.com docker network disconnect 使指定容器连接离开某网络 docker network disconnect docker network inspect 查看网络详细信息 docker network inspect
八. Docker Compose
Docker Compose就可以帮助我们实现多个相互关联的Docker容器的快速部署。它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器。
docker-compose文件中可以定义多个相互关联的应用容器,每一个应用容器被称为一个服务(service)。由于service就是在定义某个应用的运行时参数,因此与
docker run
参数非常相似。 举例来说,用docker run部署MySQL的命令如下:docker run -d \--name mysql \-p 3306:3306 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=123 \-v ./mysql/data:/var/lib/mysql \-v ./mysql/conf:/etc/mysql/conf.d \-v ./mysql/init:/docker-entrypoint-initdb.d \--network hmallmysql
如果用
docker-compose.yml
文件来定义,就是这样:version: "3.8"services:mysql:image: mysqlcontainer_name: mysqlports:- "3306:3306"environment:TZ: Asia/ShanghaiMYSQL_ROOT_PASSWORD: 123volumes:- "./mysql/conf:/etc/mysql/conf.d"- "./mysql/data:/var/lib/mysql"networks:- new networks:new:name: hmall
对比如下:
docker run 参数 docker compose 指令 说明 --name container_name 容器名称 -p ports 端口映射 -e environment 环境变量 -v volumes 数据卷配置 --network networks 网络 基本命令:
基本语法:docker compose [OPTIONS] [COMMAND]
其中,OPTIONS和COMMAND都是可选参数,比较常见的有:
类型 参数或指令 说明 Options -f 指定compose文件的路径和名称 Options -p 指定project名称。project就是当前compose文件中设置的多个service的集合,是逻辑概念 Commands up 创建并启动所有service容器 Commands down 停止并移除所有容器、网络 Commands ps 列出所有启动的容器 Commands logs 查看指定容器的日志 Commands stop 停止容器 Commands start 启动容器 Commands restart 重启容器 Commands top 查看运行的进程 Commands exec 在指定的运行中容器中执行命令