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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 生产环境部署与协同开发 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


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1天前
|
JavaScript 前端开发 测试技术
Docker环境下部署Ghost开源内容管理系统
【5月更文挑战第9天】Docker环境下部署Ghost开源内容管理系统
7 0
|
2天前
|
Cloud Native 测试技术 数据安全/隐私保护
云原生之使用Docker部署Teedy轻量级文档管理系统
【5月更文挑战第8天】云原生之使用Docker部署Teedy轻量级文档管理系统
14 1
|
3天前
|
Cloud Native 测试技术 Linux
云原生之使用Docker部署homer静态主页
【5月更文挑战第7天】云原生之使用Docker部署homer静态主页
10 0
|
4天前
|
监控 Cloud Native 测试技术
云原生之使用Docker部署ServerBee服务器监控工具
【5月更文挑战第6天】云原生之使用Docker部署ServerBee服务器监控工具
12 1
|
5天前
|
前端开发 应用服务中间件 nginx
前后端分离项目Docker部署指南(下)
前后端分离项目Docker部署指南(下)
|
运维 Kubernetes 前端开发
【云原生】阿里云服务器部署 Docker Swarm集群
阿里云服务器 一键部署 Docker Swarm 集群!
547 0
【云原生】阿里云服务器部署 Docker Swarm集群
|
弹性计算 Linux Shell
阿里云一键部署 Docker Datacenter
使用阿里云ROS一键部署Docker Datacenter
12227 1
|
弹性计算 Shell Docker
阿里云一键部署 Docker Datacenter
使用ROS模板在阿里云上一键部署Docker Datacenter
7722 0
|
4天前
|
存储 安全 数据安全/隐私保护
【Docker 专栏】Docker 容器化应用的备份与恢复策略
【5月更文挑战第9天】本文探讨了Docker容器化应用的备份与恢复策略,强调了备份在数据保护、业务连续性和合规要求中的关键作用。内容涵盖备份的重要性、内容及方法,推荐了Docker自带工具和第三方工具如Portainer、Velero。制定了备份策略,包括频率、存储位置和保留期限,并详细阐述了恢复流程及注意事项。文章还提及案例分析和未来发展趋势,强调了随着技术发展,备份与恢复策略将持续演进,以应对数字化时代的挑战。
【Docker 专栏】Docker 容器化应用的备份与恢复策略