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

本文涉及的产品
容器镜像服务 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


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5月前
|
缓存 关系型数据库 MySQL
MySQL索引策略与查询性能调优实战
在实际应用中,需要根据具体的业务需求和查询模式,综合运用索引策略和查询性能调优方法,不断地测试和优化,以提高MySQL数据库的查询性能。
464 66
|
4月前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
145 3
实战~如何组织一个多容器项目docker-compose
|
4月前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
405 7
|
5月前
|
运维 Cloud Native 云计算
云原生之旅:Docker容器化实战
本文将带你走进云原生的世界,深入理解Docker技术如何改变应用部署与运维。我们将通过实际案例,展示如何利用Docker简化开发流程,提升应用的可移植性和伸缩性。文章不仅介绍基础概念,还提供操作指南和最佳实践,帮助你快速上手Docker,开启云原生的第一步。
|
5月前
|
Kubernetes Linux 开发者
深入探索容器化技术——Docker 的实战应用
深入探索容器化技术——Docker 的实战应用
197 0
|
5月前
|
存储 Cloud Native 开发者
深入探索容器化技术——Docker的实战应用
深入探索容器化技术——Docker的实战应用
74 0
|
5月前
|
存储 安全 Docker
Docker 的实战应用与优化策略
Docker 的实战应用与优化策略
78 0
|
5月前
|
JavaScript Linux 持续交付
深入探索容器化技术——Docker 的实战应用
深入探索容器化技术——Docker 的实战应用
91 0
|
5月前
|
Kubernetes 监控 安全
容器化技术:Docker与Kubernetes的实战应用
容器化技术:Docker与Kubernetes的实战应用