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
准备工作:
- 注意:使用的机器需能够上网。
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
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版本
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
二、部署 Nginx 镜像容器
1.下载基础镜像
[root@Docker ~]# docker pull dadoha/centos7.4.1708 [root@Docker ~]# docker images
2.创建工作目录
[root@Docker ~]# mkdir nginx [root@Docker ~]# cd nginx/
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
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
验证:使用浏览器访问 http://192.168.1.1:888
三、部署 Tomcat 镜像容器
- 实验所需软件包从这个链接下载:https://pan.baidu.com/s/1FiSFkEKxNMiaR8uaN7r8SQ
- 提取码:fbuv
- 注意:如果未下载基础镜像需 docker pull dadoha/centos7.4.1708 来下载基础镜像。
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
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
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
验证:使用浏览器访问 http://192.168.1.1:8888
四、部署 MySQL 镜像容器
- 实验所需软件从这个链接下载:https://pan.baidu.com/s/1j1XbIIjVxODcxMVas6Z1bg
- 提取码:b51w
- 注意:如果未下载基础镜像需 docker pull dadoha/centos7.4.1708 来下载基础镜像。
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
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
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
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;
2)在宿主机上安装 mariadb 来进行验证
[root@Docker ~]# yum -y install mariadb [root@Docker ~]# mysql -uroot -p123456 -h192.168.1.1 -P13306
- 注意:如果出现如下错误是因为远程的数据库未启动。