Docker 实战——部署 Nginx 镜像容器、Tomcat 镜像容器、MySQL 镜像容器

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Docker 实战——部署 Nginx 镜像容器、Tomcat 镜像容器、MySQL 镜像容器

Docker 实战——部署 Nginx 镜像容器、Tomcat 镜像容器、MySQL 镜像容器



一、安装 Docker


1.安装需要的软件包

2.设置 Docker 的 yum 源

3.安装 Docker

4.启动 Docker 并设置开机自启

5.验证 Docker 是否安装成功

6.配置 Docker 加速器


二、部署 Nginx 镜像容器


1.下载基础镜像

2.创建工作目录

3.编写 Dockerfile 文件

4.编写执行脚本内容

5.生成镜像

6.启动容器并验证


三、部署 Tomcat 镜像容器


1.创建工作目录,并拖入相关软件

2.编写 Dockerfile 文件

3.编写执行脚本内容

4.生成镜像

5.运行容器并验证


四、部署 MySQL 镜像容器


1.创建工作目录,并拖入相关软件

2.编写 Dockerfile 文件

3.创建其他相关文件

4.生成镜像

5.运行容器并验证

1)进入容器,登录数据库

2)在宿主机上安装 mariadb 来进行验证


一、安装 Docker



准备工作:


image.png



  • 注意:使用的机器需能够上网。


1.安装需要的软件包


[root@Docker ~]# yum -y install yum-utils device-mapper-persistent-data lvm2


2.设置 Docker 的 yum 源


[root@Docker ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@Docker ~]# yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo


image.png


3.安装 Docker


可使用 yum list docker-ce --showduplicates | sort -r 命令来查看 Docker 的所有版本。


[root@Docker ~]# yum -y install docker-ce-17.12.1.ce      #安装docker


4.启动 Docker 并设置开机自启


[root@Docker ~]# systemctl start docker
[root@Docker ~]# systemctl enable docker


5.验证 Docker 是否安装成功


[root@Docker ~]# docker version           #查看Docker版本


image.png


6.配置 Docker 加速器


[root@Docker ~]# cat <<END > /etc/docker/daemon.json
{
    "registry-mirrors": [
        "https://1nj0zren.mirror.aliyuncs.com",
        "https://docker.mirrors.ustc.edu.cn",
        "http://f1361db2.m.daocloud.io",
        "https://registry.docker-cn.com"
    ]
}
END
[root@Docker ~]# systemctl daemon-reload      #重新加载systemd配置
[root@Docker ~]# systemctl restart docker       #重启docker


image.png


二、部署 Nginx 镜像容器



1.下载基础镜像


[root@Docker ~]# docker pull dadoha/centos7.4.1708
[root@Docker ~]# docker images


image.png


2.创建工作目录


[root@Docker ~]# mkdir nginx
[root@Docker ~]# cd nginx/


image.png


3.编写 Dockerfile 文件


[root@Docker nginx]# vim Dockerfile
#设置基础镜像
FROM dadoha/centos7.4.1708
#维护该镜像的用户信息
MAINTAINER zhangsan
#安装相关依赖包
RUN yum clean all ; yum -y install proc-devel net-tools gcc zlib zlib-devel make openssl-devel wget
#下载并解压nginx软件包
RUN wget http://nginx.org/download/nginx-1.12.0.tar.gz
RUN tar zxf nginx-1.12.0.tar.gz -C /usr/src/
#切换目录
WORKDIR /usr/src/nginx-1.12.0/
#编译安装
RUN ./configure --prefix=/usr/local/nginx && make && make install
#开启端口
EXPOSE 80
EXPOSE 443
#修改nginx文件,以非daemon方式启动
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
#复制启动脚本
ADD run.sh /
RUN chmod 755 /run.sh
#运行启动脚本
CMD ["/run.sh"]


4.编写执行脚本内容


[root@Docker nginx]# cat <<END > run.sh
#!/bin/bash
/usr/local/nginx/sbin/nginx
END


image.png


5.生成镜像


[root@Docker nginx]# docker build -t nginx:v1.2 .


6.启动容器并验证


[root@Docker nginx]# docker images
[root@Docker nginx]# docker run -d --name nginx -p 888:80 nginx:v1.2
[root@Docker nginx]# docker ps


image.png


验证:使用浏览器访问 http://192.168.1.1:888


image.png


三、部署 Tomcat 镜像容器




1.创建工作目录,并拖入相关软件


[root@Docker ~]# mkdir tomcat
[root@Docker ~]# cd tomcat/
[root@Docker tomcat]# ls
apache-tomcat-8.5.16.tar.gz  jdk-8u91-linux-x64.tar.gz
[root@Docker tomcat]# tar zxf jdk-8u91-linux-x64.tar.gz 
[root@Docker tomcat]# ls
apache-tomcat-8.5.16.tar.gz  jdk1.8.0_91  jdk-8u91-linux-x64.tar.gz


image.png


2.编写 Dockerfile 文件


[root@docker tomcat]# vim Dockerfile
#设置基础镜像
FROM dadoha/centos7.4.1708
#维护该镜像的用户信息
MAINTAINER zhangsan
#给JDK设置变量
ADD jdk1.8.0_91 /usr/local/java
ENV JAVA_HOME /usr/local/java
ENV JAVA_BIN /usr/local/java/bin
ENV JRE_HOME /usr/local/java/jre
ENV PATH $PATH:/usr/local/java/bin/:/usr/local/java/jre/bin
ENV CLASSPATH /usr/local/java/jre/bin:/usr/local/java/lib:/usr/local/java/jre/lib/charsets.jar
#传入tomcat软件包
COPY apache-tomcat-8.5.16.tar.gz /
RUN tar zxf /apache-tomcat-8.5.16.tar.gz
#将解压后文件移动位置,重命名为tomcat
RUN mv /apache-tomcat-8.5.16 /usr/local/tomcat
#开启8080端口
EXPOSE 8080
#复制启动脚本
ADD run.sh /
RUN chmod 755 /run.sh
#运行启动脚本
CMD ["/run.sh"]


3.编写执行脚本内容


[root@Docker tomcat]# cat <<END > run.sh 
#!/bin/bash
/usr/local/tomcat/bin/startup.sh
tailf /run
END


image.png


4.生成镜像


[root@Docker tomcat]# docker build -t tomcat:v8.5 .


5.运行容器并验证


[root@Docker tomcat]# docker images | grep tomcat
[root@Docker tomcat]# docker run -d --name tomcat -p 8888:8080 tomcat:v8.5
[root@Docker tomcat]# docker ps | grep tomcat


image.png


验证:使用浏览器访问 http://192.168.1.1:8888


image.png


四、部署 MySQL 镜像容器




1.创建工作目录,并拖入相关软件


[root@Docker ~]# mkdir mysql
[root@Docker ~]# cd mysql/
[root@Docker mysql]# ls
boost_1_59_0.tar.bz2  mysql-5.7.12.tar.gz


image.png


2.编写 Dockerfile 文件


[root@Docker mysql]# vim Dockerfile
#设置基础镜像
FROM dadoha/centos7.4.1708
#维护该镜像的用户信息
MAINTAINER zhangsan
#下载相关工具
RUN yum -y groupinstall "开发工具"
RUN yum -y install zlib zlib-devel gcc gcc-c++ ncurses ncurses-devel bison libgcrypt perl cmake net-tools
#创建mysql用户和组
RUN groupadd mysql
RUN useradd -r -g mysql mysql
#复制软件包到指定目录(将会自动解压)
ADD boost_1_59_0.tar.bz2 /usr/local/
ADD mysql-5.7.12.tar.gz /tmp/
#指定工作目录
WORKDIR /tmp/mysql-5.7.12/
#cmake配置及编译安装
RUN cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DMYSQL_TCP_PORT=3306 -DMYSQL_USER=mysql \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DENABLE_DOWNLOADS=1 \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/boost_1_59_0 \
-DSYSCONFDIR=/etc && make && make install
#更改mysql目录的属主和属组
RUN chown -R mysql:mysql /usr/local/mysql
#删除默认安装的my.cnf文件
RUN rm -rf /etc/my.cnf
#复制一份my.cnf到/etc/目录
ADD my.cnf /etc/
#复制启动脚本
RUN cp /tmp/mysql-5.7.12/support-files/mysql.server /etc/init.d/
RUN chmod +x /etc/init.d/mysql.server
ADD mysqld.service /usr/lib/systemd/system/
#设置环境变量
ENV PATH $PATH:/usr/local/mysql/bin/
#创建日志目录
RUN mkdir /usr/local/mysql/logs
RUN chown mysql:mysql /usr/local/mysql/logs/
#开启3306端口
EXPOSE 3306
#初始化设置
RUN mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
#直接设置运行启动脚本
RUN echo -e "#!/bin/bash \nsystemctl enable mysqld" > /run.sh
#给予权限
RUN chmod 755 /run.sh
RUN sh /run.sh
#启动容器时执行
CMD ["init"]


3.创建其他相关文件


[root@Docker mysql]# vim my.cnf
[mysqld]
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
character_set_server=utf8
init_connect='SET NAMES utf8'
log-error=/usr/local/mysql/logs/mysqld.log
pid-file=/usr/local/mysql/logs/mysqld.pid
skip-name-resolve


[root@Docker mysql]# vim mysqld.service
[Unit]
Description=mysqldapi
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/mysql/logs/mysqld.pid
ExecStart=/etc/init.d/mysql.server start
ExecReload=/etc/init.d/mysql.server restart
ExecStop=/etc/init.d/mysql.server stop
PrivateTmp=Flase
[Install]
WantedBy=multi-user.target


image.png


4.生成镜像


[root@Docker mysql]# docker build -t mysql:v5.7 .


5.运行容器并验证


  • --privileged:表示不降权,也就是进入容器中,也可以是 root 权限。


[root@Docker mysql]# docker images | grep mysql
[root@Docker mysql]# docker run -d --name mysql -p 13306:3306 --privileged mysql:v5.7
[root@Docker mysql]# docker ps | grep mysql


image.png


1)进入容器,登录数据库


  • 如果进入容器后使用 netstat -anpt | grep 3306 查不到端口,则通过 /etc/init.d/mysql.server start 来启动。


[root@Docker mysql]# docker exec -it mysql /bin/bash
[root@75f6e0308671 mysql-5.7.12]# netstat -anpt | grep 3306
mysql> grant all privileges on *.* to 'root'@'%' identified by '123456';
mysql> flush privileges;


image.png


2)在宿主机上安装 mariadb 来进行验证


[root@Docker ~]# yum -y install mariadb
[root@Docker ~]# mysql -uroot -p123456 -h192.168.1.1 -P13306


image.png


  • 注意:如果出现如下错误是因为远程的数据库未启动。


image.png


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2天前
|
Cloud Native 持续交付 Docker
云原生之旅:Docker容器化实战指南
【8月更文挑战第29天】本文将引领你进入云原生技术的世界,以Docker容器化为切入点,深入浅出地介绍如何利用Docker进行应用的打包、部署及管理。我们将通过实际代码示例,一步步展示Docker镜像的构建过程,以及如何运行和管理这些容器。无论你是初学者还是有一定经验的开发者,都能从中获得宝贵的知识和实操经验。
|
4天前
|
存储 安全 Ubuntu
Docker 镜像与 Docker 容器的区别
【8月更文挑战第27天】
42 5
|
4天前
|
存储 Kubernetes 安全
如何与不同节点共享 Docker 容器
【8月更文挑战第27天】
17 5
|
3天前
|
Shell Docker 容器
docker给容器分配固定ip
docker给容器分配固定ip
14 3
|
4天前
|
运维 Ubuntu Shell
掌握Docker容器的创建:从镜像到实例
【8月更文挑战第27天】
42 4
|
3天前
|
Kubernetes Unix Linux
k8s将节点容器运行时从Docker迁移到Containerd
k8s将节点容器运行时从Docker迁移到Containerd
|
15天前
|
JSON JavaScript 开发者
Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
【8月更文挑战第7天】Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
Composerize神器:自动化转换Docker运行命令至Compose配置,简化容器部署流程
|
10天前
|
关系型数据库 MySQL 应用服务中间件
[Docker]容器内文件修改
【8月更文挑战第21天】[Docker]容器内文件修改
35 13
|
4天前
|
运维 开发者 Docker
Docker容器化技术在运维中的应用实践
【8月更文挑战第27天】本文旨在探讨Docker容器化技术如何在现代运维工作中发挥核心作用,通过深入浅出的方式介绍Docker的基本概念、优势以及实际应用场景。文章将结合具体案例,展示如何利用Docker简化部署流程、提高资源利用率和加强应用的可移植性。读者将获得对Docker容器技术在实际运维中应用的全面认识,并能够理解其在提升运维效率与质量方面的重要性。
|
12天前
|
Shell 调度 Docker
在Docker中,如何清理批量后台停止的容器?
在Docker中,如何清理批量后台停止的容器?
下一篇
云函数