0


docker基础实践(拉取启动镜像、dockerfile 制作镜像、docker-compose 运行多个容器)

docker安装Mysql

docker学习计划:
1、在线、离线安装docker
2、下载镜像(指定版本)、运行容器
3、运行容器时映射 配置文件、日志文件、数据文件等路径
4、查看容器日志
5、查看容器启动命令、修改容器启动命令(不删除容器的情况下)
6、容器导出新镜像、镜像导出
7、使用dockerfile 制作镜像
8、使用docker-compose 运行多个容器
9、设置私有仓库,并拉取镜像
成果:
1、在虚拟机中运行单个应用
2、使用docker-compose运行多个应用
3、本地存在研发云镜像,使用项目名、及最新版本命名镜像

一、 从远程拉取镜像

# 拉取最新版本镜像
docker pull mysql
# 拉取指定版本镜像
docker pull mysql:8.0
# 查看镜像是否安装完成
docker image

操作截图:
在这里插入图片描述在这里插入图片描述

二、创建挂载目录,设置配置文件(指定字符集)

# 设置挂载宿主机目录mkdir -p /home/tools/mysql/date
mkdir -p /home/tools/mysql/conf
# 常见配置文件vim /home/tools/mysql/conf/mysql.cnf
# 查看配置文件内容cat /home/tools/mysql/conf/mysql.cnf

配置文件内容:

[client]default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8

三、创建运行容器:

# 创建运行容器
docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 -v /home/tools/mysql/conf/mysql.cnf:/etc/mysql/conf.d/mysql.cnf -v /home/tools/mysql/data:/var/lib/mysql -d mysql
# 查看运行中的容器
docker ps# 容器启动后设置容器开机自启,也可将例:--restart=always 添加到创建容器的命令中
docker update --restart=always 容器id/容器name

命令解析:

–name 后边跟的名字可以自己指定

-e MYSQL_ROOT_PASSWORD=root 是关于环境变量的 后边跟上自己要设置的root密码 可以自定

-p 3306:3306\ 宿主机端口:虚拟机映射端口

-v /home/tools/mysql/conf/hmy.cnf:/etc/mysql/conf.d\hmy.cnf\挂载的宿机目录文件:容器目录

-v /home/tools/mysql/data:/var/lib/mysql\挂载的数据目录:容器目录(需要在官网里看)

-d 是后台运行

musql:tag :输入的是自己mysql的版本

在这里插入图片描述

四、使用数据库连接工具查看

在这里插入图片描述

五、进入容器:

# 进入容器 docker exec -it 容器name/容器id /bin/bash
docker exec -it mysql /bin/bash
# 退出exit

docker镜像和容器的导入导出

一、export容器的导出

# 查看本机已用的容器
docker ps -a
# 执行导出命令保存为.tar文件
docker export redis > /home/tar/redis.tar
docker export -o /home/tar/redis.tar redis

在这里插入图片描述

二、import容器的导入

docker import /home/tar/redis.tar redis:v1.0.0

在这里插入图片描述

三、save命令导出镜像

docker save > /home/tar/redis.tar redis
docker save -o /home/tar/redis1.tar redis

在这里插入图片描述

四、load命令导入镜像

docker load -i /home/tar/redis1.tar
docker load < /home/tar/redis1.tar

在这里插入图片描述

五、不同点

Docker的export/import和save/load都是用于容器和镜像的备份与迁移的工具,但它们之间存在一些关键的区别。以下是对这两组命令的详细比较:

一、操作对象不同
export/import:这组命令主要操作的是容器。export命令用于将容器的当前状态导出为一个tar文件,而import命令则用于将这个tar文件导入为一个新的镜像。
save/load:这组命令主要操作的是镜像。save命令用于将镜像的所有信息(包括层、标签、元数据等)导出为一个tar文件,而load命令则用于将这个tar文件导入为一个镜像。
二、保留的信息不同
export/import:
优点:只保留容器的文件系统,即容器内的所有文件和目录,以及运行时生成的数据。这通常用于创建轻量级的镜像。
缺点:不保留容器的元数据(如环境变量、工作目录、端口映射等)、历史记录和卷(volumes)中的数据(除非卷被挂载到容器的文件系统内)。导入后创建的新镜像会失去原始镜像的层结构,可能导致镜像大小增加。
save/load:
优点:保留完整的镜像信息和历史,包括所有层、标签、元数据等。这使得导入后的镜像与原始镜像在功能上保持一致。
缺点:导出的文件通常比export命令产生的文件大,因为包含了更多的信息。
三、文件大小不同
export:通常产生较小的文件,因为它只包含容器的文件系统。
save:产生较大的文件,因为它包含了镜像的所有信息和历史。
四、用途不同
export/import:适合用于创建小型基础镜像或简化已有镜像,特别是当你需要捕获容器在某个特定时刻的状态时。
save/load:适合用于完整备份和迁移镜像,特别是当你需要在不同系统或环境之间迁移镜像时。

使用dockerfile制作镜像

一、上传相关文件

文件上传路径;/home/jar/dqm/下
在这里插入图片描述

二、实现镜像制作dockerfile文件

# 进入相应路径cd /home/jar/dqm/
# 编辑dockerfile文件vim dqm.dockerfile
# 运行环境
FROM openjdk:17
#作者信息
MAINTAINER lyh
# 端口
EXPOSE 12040# 设置工作目录
WORKDIR /dqm
#拷贝
COPY dqm-1.0.0-SNAPSHOT.jar /dqm/dqm-1.0.0-SNAPSHOT.jar
COPY application.yml /dqm/application.yml
#执行命令
CMD java -jar dqm-1.0.0-SNAPSHOT.jar --spring.config.location=application.yml
相关命令解读:
FROM:构建镜像基于哪个镜像
MAINTAINER:镜像维护者姓名或邮箱地址
RUN:构建镜像时运行的指令
CMD:运行容器时执行的shell环境
VOLUME:指定容器挂载点到宿主机自动生成的目录或其他容器
USER:为RUN、CMD、和 ENTRYPOINT 执行命令指定运行用户
WORKDIR:为 RUN、CMD、ENTRYPOINT、COPY 和 ADD 设置工作目录,就是切换目录
HEALTHCHECH:健康检查
ARG:构建时指定的一些参数
EXPOSE:声明容器的服务端口(仅仅是声明)
ENV:设置容器环境变量
ADD:拷贝文件或目录到容器中,如果是URL或压缩包便会自动下载或自动解压
COPY:拷贝文件或目录到容器中,跟ADD类似,但不具备自动下载或解压的功能
ENTRYPOINT:运行容器时执行的shell命令

三、docker build制作镜像

# 制作dqm:1.0.0版本的镜像
docker build -f dqm.dockerfile -t dqm:1.0.0 .

在这里插入图片描述

四、运行镜像

# 启动容器
docker run -d --name dqm -p 12040:12040 dqm:1.0.0
# 查看运行日志 
docker logs dqm
# 查看运行中的容器 
docker ps

在这里插入图片描述
在这里插入图片描述

docker-compose意见部署多个应用

是一个用来定义和运行多个复杂应用的Docker编排工具。通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景

一、安装docker-compose

sudo yum update
sudo yum install docker-compose-plugin
# 验证安装完成
docker compose version

二、将需要启动的jar包放在同一目录下

在这里插入图片描述

三、编辑docker-compose.yml

services:
  mysql:
    image: mysql
    container_name: mysql_container
    environment:
      MYSQL_ROOT_PASSWORD: 'root'
      LOWER_CASE_TABLE_NAMES: '1'
    ports:
      - "3306:3306"
    volumes:
      - /home/tools/mysql/data:/var/lib/mysql
      - /home/tools/mysql/conf/mysql.cnf:/etc/mysql/conf.d/mysql.cnf

  app1:
    image: openjdk:17
    container_name: dqm_container
    depends_on:
      - mysql
    volumes:
      - ./dqm.jar:/app/dqm.jar
      - ./application-dqm.yml:/app/application-dqm.yml
    working_dir: /app
    ports:
      - "12040:12040"
    command: ["java", "-jar", "dqm.jar", "--spring.config.location=application-dqm.yml"]

  app2:
    image: openjdk:17
    container_name: mdm_container
    depends_on:
      - mysql
    volumes:
      - ./mdm.jar:/app/mdm.jar
      - ./application-mdm.yml:/app/application-mdm.yml
    working_dir: /app
    ports:
      - "12030:12030"
    command: ["java", "-jar", "mdm.jar", "--spring.config.location=application-mdm.yml"]

docker-compose.yml 文件定义了三个服务:mysql、app1 和 app2。每个服务都有其特定的配置和命令。以下是对这些配置和命令的详细解释:
mysql 服务
image: mysql: 指定使用 Docker上的 mysql 镜像,这意味着将拉取 MySQL最新版本的镜像。
container_name: mysql_container: 为容器指定一个名称,便于识别和管理。
environment: 设置环境变量,用于配置 MySQL。
MYSQL_ROOT_PASSWORD: example_password: 设置 root 用户的密码。
LOWER_CASE_TABLE_NAMES: ‘1’ :设置大小写不敏感。
ports: 端口映射,将容器的 3306 端口映射到主机的 3306 端口,以便可以从主机访问 MySQL 服务。
volumes: 数据卷配置,用于持久化 MySQL 数据。

  • /home/tools/mysql/data:/var/lib/mysql 挂载数据文件。
  • /home/tools/mysql/conf/mysql.cnf:/etc/mysql/conf.d/mysql.cnf 挂载配置文件。 app1 和 app2 服务 这两个服务非常相似,只是它们使用不同的 JAR 包和端口映射。 image: openjdk:17: 指定使用官方的 OpenJDK 17 镜像,这是一个轻量级的镜像,适合运行 Java 应用程序。 container_name: 分别为 dqm_container 和 mdm_container,为容器指定名称。 depends_on: 指定该服务依赖于 mysql 服务。这意味着 Docker Compose 将先启动 mysql 服务,然后再启动 app1 或 app2 服务。 volumes: 将主机上的 JAR 包文件复制到容器中的指定位置。 例如,./dqm.jar:/app/dqm.jar 表示将主机当前目录下的 dqm.jar 文件复制到容器内的 /app 目录,并重命名为 dqm.jar。 working_dir: 设置容器内的工作目录,这里是 /app。 command: 指定容器启动时执行的命令。 例如,[“java”, “-jar”, “mdm.jar”, “–spring.config.location=application-mdm.yml”] 表示在容器内运行jar包的命令。 ports: 端口映射,将容器内的端口映射到主机的端口。 例如,app1 服务的 12040端口映射到主机的 12040 端口,app2 服务的 12030端口映射到主机的 12030 端口。

四、启动dockers-compose

# 检查docker-compose.yml是否存在语法错误
docker compose config -q
# 启动容器
docker compose up -d
# 一键停止并删除
docker compose down
# 一键停止
docker compose stop
# 一键启动
docker compose start
# 一键重启
docker compose restart
# [OPTIONS]:可选参数,用于修改日志的显示方式。# [SERVICE...]:可选参数,指定要查看日志的服务名称。如果不指定服务,将显示所有服务的日志。# eg: docker compose logs app1
docker compose logs [OPTIONS][SERVICE...]# 持续查看所有服务的日志
docker compose logs -f
# 查看特定服务的最后10行日志
docker compose logs --tail=10 app1
# 查看带有时间戳的日志
docker compose logs --timestamps web

在这里插入图片描述

五、查看运行

在这里插入图片描述

docker拉取研发云镜像

注意: 网络设置net模式,登录SDP。虚拟机上需要配置hosts文件

# 添加私有仓库地址配置 40.12.254.169 artifacts.cloud.cnvim /etc/hosts
# 测试是否能通ping artifacts.cloud.cn
# 编辑镜像源文件增加研发云镜像地址vim /etc/docker/daemon.json
# 如下{"registry-mirrors":["https://mirror.ccs.tencentyun.com",
        "https://docker.registry.cyou",
        "https://docker-cf.registry.cyou",
        "https://dockercf.jsdelivr.fyi",
        "https://docker.jsdelivr.fyi",
        "https://dockertest.jsdelivr.fyi",
        "https://mirror.aliyuncs.com",
        "https://dockerproxy.com",
        "https://mirror.baidubce.com",
        "https://docker.m.daocloud.io",
        "https://docker.nju.edu.cn",
        "https://docker.mirrors.sjtug.sjtu.edu.cn",
        "https://docker.mirrors.ustc.edu.cn",
        "https://mirror.iscas.ac.cn",
        "https://docker.rainbond.cc",
        "https://artifacts.cloud.cn""
        ]}
# 登录研发云镜像源, 输入账号密码
docker login <私有仓库地址># 拉取私有仓库镜像
docker pull artifacts.cloud.cn/ah-oshare-docker-mc/arm64/nginx:1.27.0
# 查看是否成功
docker images

在这里插入图片描述

# 退出Docker私有仓库
docker logout<私有仓库地址>
标签: docker 容器 运维

本文转载自: https://blog.csdn.net/saonian0929/article/details/142523889
版权归原作者 一个简单的名称 所有, 如有侵权,请联系我们删除。

“docker基础实践(拉取启动镜像、dockerfile 制作镜像、docker-compose 运行多个容器)”的评论:

还没有评论