生产环境部署与协同开发 Docker(二)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 生产环境部署与协同开发 Docker(二)

三、Docker实战

3.1 Docker容器配置Java环境

查看JDK镜像

docker  search  openjdk:8

下载JDK镜像

docker  pull  openjdk:8

创建并查看JDK容器

docker run   openjdk:8 java -version

3.2 Docker安装Tomcat

查看tomcat 镜像

docker search docker.io/tomee

下载tomcat镜像

docker pull docker.io/tomee

创建并启动tomcat容器

docker run -d --name mytomcat -p 9090:8080 docker.io/tomee

注意:

  • -p 映射端口 宿主机端口号:容器内应用端口
  • -P 随机端口

注意:这里的宿主机指的是CentOS操作系统。

浏览器访问tomcat容器

开启tomcat容器

docker start 82

查看并关闭防火墙

firewall-cmd --state  #查看防火墙状态
systemctl stop firewalld.service   #关闭防火墙

访问

http://192.168.66.100:9090

3.3 Docker配置Mysql数据库

查看镜像

docker search mysql:5.7

下载镜像

docker pull mysql:5.7

创建容器并启动

docker run --name mysql -d  -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456  mysql:5.7

参数:

  • -p 我们以后使用3307 端口来访问mysql 为了防止黑客攻击
  • -e 配置环境变量
    MYSQL_ROOT_PASSWORD 设置容器内mysql root 密码

进入mysql容器

[root@localhost ~]# docker exec -it 43 /bin/bash
bash-4.2# mysql -uroot -p

四、Docker数据管理

4.1 数据卷

思考

  • Docker容器删除后,在容器中产生的数据还在吗?不在了。

  • Docker容器和外部机器可以直接交换文件吗?不能。

  • 容器之间能进行数据交互?能,但是要通过数据卷

什么是容器数据卷

  • 数据卷是宿主机中的一个目录或文件。
  • 当容器目录和数据卷目录绑定后,对方修改会立即同步。
  • 一个数据卷可以同时被多个容器同时挂载。
  • 一个容器也可以被挂载多个数据卷。

Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷(Data Volume)

数据卷作用

  • 容器数据持久化。
  • 外部机器和容器间接通信。
  • 容器之间数据交换。

一句话: 卷技术就是为了实现数据的持久化和同步操作,容器间也是数据共享。

4.2 配置数据卷

docker run  -v 宿主机目录(文件):容器内目录(文件)

注意事项

  1. 目录必须是绝对路径
  2. 如果目录不存在则会自动创建
  3. 一个容器可以挂载到多个数据卷上

示例:将tomcat容器挂载到数据卷上

docker run -d --name mytomcat -p 8080:8080 -v /opt/webapps:/usr/local/tomcat/webapps tomcat

4.3 容器数据卷Volume

Volume基本使用

参数:

create      # 创建数据卷

inspect     #查看数据卷元数据

ls             #查看数据卷列表

prune       #删除所有未使用的卷

rm           #删除数据卷

创建一个自定义数据卷

查看所有数据卷

查看指定数据卷etc-tomcat-vol详情信息

删除数据卷

使用指定卷容器

docker run -d -it --name=edc-tomcat -p 8080:8080 -v edc-tomcat-vol:/usr/local/tomcat/webapps tomcat

注意:

-v代表挂载数据卷,这里使用自定数据卷edc-tomcat-vol,并且将数据卷挂载到/usr/local/tomcat/webapps 。如果没有通过-v指定,那么Docker会默认帮我们创建匿名数据卷进行映射和挂载。

4.4 Mysql数据持久化

五、Dockerfile

5.1 什么是Dockerfile

Dockerfile是一个文本格式的配置文件,用户可以使用Dockerfile快速创建自定义的镜像。

基本结构

Dockerfile由一行行命令语句组成,并且支持以#开头的注释行。一般而言,Dockerfile分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。

例如:

##  Dockerfile文件格式 
# 1、第一行必须指定 基础镜像信息(dockerhub上下载的,也就是依赖环境)
FROM java:8
# 2、维护者信息
MAINTAINER baizhan  baizhan@163.com
# 3、镜像操作指令(这里下载了tomcatjar包)
RUN  echo "wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.55/bin/apache-tomcat-9.0.55.tar.gz"
run tar -zxvf apache-tomcat-9.0.55.tar.gz -C /usr/local
# 4、容器启动执行指令
CMD /usr/local/tomcat/bin/catalina.sh

Dockerfile 四部分说明:

  • 一开始必须要指明所基于的镜像名称, 关键字是FROM, 这是必须的.
  • 接下来是维护者信息关键字是MAINTAINER, 非必须, 但良好的习惯有利于后期的职责明确.
  • 后面是镜像操作指令, 如RUN等, 每执行一条RUN命令,镜像添加新的一层.
  • 最后是CMD指令,来指明运行容器时的操作命令.

5.2 构建镜像

1、在一个空白的文本文件, 命名为Dockerfile

vim  Dockerfile

注意文件名称必须为Dockerfile

2、编写Dockerfile文件内容

3、构建镜像

docker build -t 镜像名字(自定义):版本(自定义).

注意

. 代表Dockerfile文件在当前路径,也就是将dockerfile文件放在当前路径。自定义名称必须小写。

4、查看镜像

5、创建镜像容器并运行

使用run指令创建的容器在执行完指令后容器就销毁了/

5.3 常见的13种指令(上)

FROM

指定基础镜像,必须为第一个命令。

FROM <image>  
FROM <image>:<tag>

注意:

tag或digest是可选的,如果不使用这两个值时,会使用latest版本的基础镜像

MAINTAINER

维护者信息

MAINTAINER <name>

WORKDIR

工作目录,类似于cd命令

WORKDIR /usr/workdir

WORKDIR /a (这时工作目录为/a)

WORKDIR b (这时工作目录为/a/b)

WORKDIR c (这时工作目录为/a/b/c)

RUN

构建镜像时执行的命令

# 1. shell执行
格式 RUN <command>
# 2. exec执行
格式 RUN ["executable", "param1", "param2"]

注意:

RUN指令创建的中间镜像会被缓存,并会在下次构建中使用。如果不想使用这些缓存镜像,可以在构建时指定--no-cache参数,如:docker build --no-cache

ADD

将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget。

ADD <src>... <dest>  
 ADD ["<src>",... "<dest>"] 用于支持包含空格的路径示例:

示例:

1、添加所有以"hom"开头的文件

ADD hom* /mydir/

2、? 替代一个单字符,例如:"home.txt"

ADD hom?.txt /mydir/

3、添加 "test" 到 WORKDIR/relativeDir/

ADD test relativeDir

4、添加 "test" 到 /absoluteDir/

ADD test /absoluteDir/

COPY

功能类似ADD,但是是不会自动解压文件,也不能访问网络资源。

COPY <源路径>  <目标路径>

CMD

构建容器后调用,也就是在容器启动时才进行调用。指定这个容器启动的时候要运行的命令只有最后一个会生效可被替换。

CMD指令与RUN指令相似,也具有两种格式:
1. shell格式:CMD <命令>
2. exec格式: CMD ["可执行文件", "参数1", "参数2", …]

注意: CMD不同于RUN,CMD用于指定在容器启动时所要执行的命令,而RUN用于指定镜像构建时所要执行的命令。

5.4  常见的13种指令下

ENTRYPOINT

配置容器,使其可执行化。配合CMD可省去"application",只使用参数。

指定容器启动的要运行的命令,可以追加命令

ENTRYPOINT ["executable", "param1", "param2"] 
ENTRYPOINT command param1 param2 (shell内部命令)

示例:

ENTRYPOINT ["top", "-b"]

注意:

ENTRYPOINT与CMD非常类似,不同的是通过docker run执行的命令不会覆盖ENTRYPOINT,而docker run命令中指定的任何参数,都会被当做参数再次传递给ENTRYPOINT。Dockerfile中只允许有一个ENTRYPOINT命令,多指定时会覆盖前面的设置,而只执行最后的ENTRYPOINT指令。

ENV

这个指令非常简单,就是用于设置环境变量而已,无论是接下来的指令,还是在容器中运行的程序,都可以使用这里定义的环境变量。

ENV <key>=<value>

示例:

ENV JAVA_HOME=/usr/local/jdk1.7.0_79
ENV PATH=$JAVA_HOME/bin:$PATH


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
8
分享
相关文章
Docker部署RocketMQ5.2.0集群
本文详细介绍了如何使用Docker和Docker Compose部署RocketMQ 5.2.0集群。通过创建配置文件、启动集群和验证容器状态,您可以快速搭建起一个RocketMQ集群环境。希望本文能够帮助您更好地理解和应用RocketMQ,提高消息中间件的部署和管理效率。
197 91
Docker 部署 Redis
在使用 Docker 部署 Redis 时,为实现数据持久化,需正确挂载容器内的数据目录到宿主机。推荐命令如下: ``` docker run -d --name redis -v /mnt/data/redis:/data -p 6379:6379 redis ``` 该命令将宿主机的 `/mnt/data/redis` 目录挂载到容器的 `/data` 目录,确保 Redis 数据持久化。此路径更通用,适合大多数场景。避免使用不匹配的挂载路径,如 `/var/lib/redis` 或 `/mnt/data/redis` 到非默认目录,以防止数据无法正确持久化。
Stirling-PDF:51.4K Star!用Docker部署私有PDF工作站,支持50多种PDF操作,从此告别在线工具
Stirling-PDF 是一款基于 Docker 的本地化 PDF 编辑工具,支持 50 多种 PDF 操作,包括合并、拆分、转换、压缩等,同时提供多语言支持和企业级功能,满足个人和企业用户的多样化需求。
57 6
Stirling-PDF:51.4K Star!用Docker部署私有PDF工作站,支持50多种PDF操作,从此告别在线工具
如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
通过这些步骤,可以确保您的Next.js应用在多核服务器上高效运行,并且在Docker环境中实现高效的容器化管理。
113 44
docker快速部署OS web中间件 数据库 编程应用
通过Docker,可以轻松地部署操作系统、Web中间件、数据库和编程应用。本文详细介绍了使用Docker部署这些组件的基本步骤和命令,展示了如何通过Docker Compose编排多容器应用。希望本文能帮助开发者更高效地使用Docker进行应用部署和管理。
37 19
使用Docker在生产环境部署应用
本文讲的是使用Docker在生产环境部署应用,【编者的话】Docker现在越来越流行,但是真正在生产环境部署Docker还是个比较新的概念,还没有一个标准的流程。作者是ROR的程序员,作者结合平时的部署经验,联系Docker的特点,向大家分享了其在生产环境使用Docker部署应用程序的一个实践。
3478 0
docker容器为啥会开机自启动
通过配置适当的重启策略,Docker容器可以在主机系统重启后自动启动。这对于保持关键服务的高可用性和自动恢复能力非常有用。选择适合的重启策略(如 `always`或 `unless-stopped`),可以确保应用程序在各种情况下保持运行。理解并配置这些策略是确保Docker容器化应用可靠性的关键。
268 93
Docker+consul容器服务的更新与发现
通过本文的介绍,我们详细探讨了如何结合Docker和Consul来实现容器服务的更新与发现。通过Consul的服务注册和发现功能,可以高效地管理和监控容器化服务,确保系统的高可用性和可扩展性。希望本文能帮助您在实际项目中更好地应用Docker和Consul,提高系统的可靠性和管理效率。
58 23
ubuntu22 编译安装docker,和docker容器方式安装 deepseek
本脚本适用于Ubuntu 22.04,主要功能包括编译安装Docker和安装DeepSeek模型。首先通过Apt源配置安装Docker,确保网络稳定(建议使用VPN)。接着下载并配置Docker二进制文件,创建Docker用户组并设置守护进程。随后拉取Debian 12镜像,安装系统必备工具,配置Ollama模型管理器,并最终部署和运行DeepSeek模型,提供API接口进行交互测试。
278 15
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
323 78
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等