你熟悉Docker吗?

你熟悉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.开通镜像服务

在首页的产品中,找到阿里云的容器镜像服务

你熟悉Docker吗?_第1张图片

点击后进入控制台:

你熟悉Docker吗?_第2张图片

首次可能需要选择立刻开通,然后进入控制台。

5.3.配置镜像加速

找到镜像工具下的镜像加速器

你熟悉Docker吗?_第3张图片

页面向下滚动,即可找到配置的文档说明:

你熟悉Docker吗?_第4张图片

具体命令如下:

# 创建目录
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,代表最新版本的镜像

Docker基础

常用命令

Docker最常见的命令就是操作镜像、容器的命令,详见官方文档

你熟悉Docker吗?_第5张图片

命令 说明
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吗?_第6张图片

加入自定义网络的容器才可以通过容器名互相访问,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吗?_第7张图片

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 在指定的运行中容器中执行命令

你可能感兴趣的:(实用工具及技术篇,docker,容器,运维)