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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 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
相关文章
|
1天前
|
Ubuntu Linux 开发工具
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
|
28天前
|
Java 应用服务中间件 Docker
将基于 Spring 的 WAR 应用程序部署到 Docker:详尽指南
将基于 Spring 的 WAR 应用程序部署到 Docker:详尽指南
32 2
|
1月前
|
Java Linux Docker
什么是 Docker?如何将 Spring Boot 应用程序部署到 Docker?
什么是 Docker?如何将 Spring Boot 应用程序部署到 Docker?
43 3
|
1月前
|
机器学习/深度学习 数据采集 Docker
Docker容器化实战:构建并部署一个简单的Web应用
Docker容器化实战:构建并部署一个简单的Web应用
|
1月前
|
持续交付 开发者 Docker
掌握Docker容器化技术,加速软件开发与部署
掌握Docker容器化技术,加速软件开发与部署
53 0
|
1月前
|
运维 Kubernetes 持续交付
深入理解Docker容器化技术及其在生产环境中的应用
深入理解Docker容器化技术及其在生产环境中的应用
42 0
|
4月前
|
运维 Java Devops
阿里云云效操作报错合集之部署docker时遇到报错,该怎么办
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
运维 Kubernetes 前端开发
【云原生】阿里云服务器部署 Docker Swarm集群
阿里云服务器 一键部署 Docker Swarm 集群!
697 0
【云原生】阿里云服务器部署 Docker Swarm集群
|
弹性计算 数据可视化 关系型数据库
使用阿里云部署基于docker的mysql云服务
本篇文章将介绍如何使用阿里云安装docker、部署mysql服务,并远程连接至远端mysql
706 1
使用阿里云部署基于docker的mysql云服务
|
弹性计算 Docker 容器
阿里云一键部署 Docker Datacenter
使用ROS模板在阿里云上一键部署Docker Datacenter
7838 0

热门文章

最新文章