Docker 在运行一个容器之前, 需要以镜像作为基础环境, 可以说镜像是整个 Docker 容器创建的关键, 而创建镜像的 3 中方法中基于 Dockerfile 文件创建最为灵活.
Dockerfile 可以看作一个被 Docker 程序锁解释翻译的脚本, 是一组命令集合而成的, 每条命令都对应一条操作指令, 由 Docker 翻译成 Linux 下的具体命令. 用户可以通过自定义其内容来快速创建镜像.
博文大纲:
一, 搭建 Nginx 容器
二, 搭建 Tomcat 容器
三, 搭建 MySQL 容器
一, 构建 Nginx 容器
Nginx 是一款轻量级的 web 服务器, 也是一款优秀的反向代理服务器. Nginx 服务占用内存少, 并发能力强, 深受国内外用户的欢迎.
1. 下载基础镜像
- [[email protected] ~]# docker pull docker.io/lvzhenjiang/centos7
- // 下载一个创建 Nginx 镜像的基础 CentOS 镜像
2. 建立工作目录
- [[email protected] ~]# mkdir nginx
- [[email protected] ~]# cd nginx/
3. 创建并编写 Dockerfile 文件
- [[email protected] nginx]# VIM Dockerfile
- FROM lvzhenjiang/centos7 // 设置基础镜像
- MAINTAINER lzj // 维护者信息
- RUN yum -y install wget prce-devel.NET-tools gcc zlib zlib-devel make openssl-devel
- // 安装所需依赖包
- RUN wget http://nginx.org/download/nginx-1.14.2.tar.gz
- // 获取 nginx 源码包
- RUN tar zxf nginx-1.14.2.tar.gz
- WORKDIR nginx-1.14.2
- // 解压之后进入解压后的目录
- RUN ./configure --prefix=/usr/local/nginx && make && make install
- // 编译安装
- EXPOSE 80 // 开启 80 端口
- EXPOSE 443 // 开启 443 端口
- RUN echo "daemon off;">> /usr/local/nginx/conf/nginx.conf
- // 修改 nginx 服务配置文件, 以非 daemon(守护进程) 方式启动
- ADD run.sh /run.sh // 上传本地编写的脚本到容器中
- RUN chmod 775 /run.sh // 赋予脚本执行权限
- CMD ["/run.sh"] // 启动容器时, 执行 run.sh 脚本
4. 编写执行脚本内容
- [[email protected] nginx]# VIM run.sh
- #!/bin/bash // 声明使用的 shell
- /usr/local/nginx/sbin/nginx // 使用 nginx 自带的脚本启动 nginx
5. 生成镜像
- [[email protected] nginx]# ls
- // 确保 Dockerfile 文件和启动脚本在同一目录下
- Dockerfile run.sh
- [[email protected] nginx]# docker build -t nginx:v1 .
- // 使用当前目录下的 Dockerfile 文件生成新的镜像, 名为 nginx:v1
6. 启动容器进行测试
- [[email protected] nginx]# docker run -dit -p 12345:80 --name nginx nginx:v1
- // 使用新生成的镜像创建一个名为 nginx 的容器, 并将容器中的 80 端口映射到宿主机的 12345 端口
- [[email protected] nginx]# docker ps -a
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 1c73bb591e84 nginx:v1 "/run.sh" 31 minutes ago Up 31 minutes 443/tcp, 0.0.0.0:12345->80/tcp nginx
- // 确认容器已经正常运行并已经映射端口
测试结果:
nginx 容器搭建完成!
二, 构建 Tomcat 容器
Tomcat 是一个免费开源的轻量级 Web 服务器, 在中小型企业和并发量不高的场合普遍使用, 是开发和调试 JSP 程序的首选.
1. 下载基础镜像
- [[email protected] ~]# docker pull docker.io/lvzhenjiang/centos7
- // 下载一个创建 Nginx 镜像的基础 CentOS 镜像
2. 创建工作目录
因为 tomcat 需要 java 的环境, 所以要下载 JDK 软件包 https://pan.baidu.com/s/1mSDPAn38QUKXQWprSqnQGA
- [[email protected] ~]# mkdir tomcat
- [[email protected] ~]# cd tomcat/
3. 编写 Dockerfile 文件
- [[email protected] tomcat]# VIM Dockerfile
- FROM lvzhenjiang/centos7 // 基础镜像
- MAINTAINER lzj // 维护者信息
- ADD jdk1.8.0_91 /usr/local/jdk-8u91
- ENV JAVA_HOME /usr/local/jdk-8u91
- ENV JAVA_BIN /usr/local/jdk-8u91/bin
- ENV JRE_HOME /usr/local/jdk-8u91/jre
- ENV PATH $PATH:/usr/local/jdk-8u91/bin:/usr/local/jdk-8u91/jre/bin
- ENV CLASSPATH /usr/local/jdk-8u91/jre/bin:/usr/local/jdk-8u91/lib:/usr/local/jdk-8u91/jre/lib/charsets.jar
- // 设置 JDK 环境变量
- RUN yum -y install wget
- RUN wget http://us.mirrors.quenda.co/apache/tomcat/tomcat-9/v9.0.27/bin/apache-tomcat-9.0.27.tar.gz
- // 获取 tomcat 软件包
- RUN tar zxf apache-tomcat-9.0.27.tar.gz
- RUN mv apache-tomcat-9.0.27 /usr/local/tomcat
- // 解压之后, 并将解压后的目录移动到指定的位置
- EXPOSE 8080
- // 开启 8080 端口
- ADD run.sh /run.sh
- RUN chmod 775 /run.sh
- CMD ["/run.sh"] // 启动容器时, 执行脚本
4. 编写启动脚本
- [[email protected] tomcat]# VIM run.sh
- #!/bin/bash
- /usr/local/tomcat/bin/startup.sh // 使用 tomcat 服务自带的脚本启动服务
- tailf /run // 让启动脚本始终运行
5. 使用 Dockerfile 文件生成镜像
- [[email protected] tomcat]# ls
- Dockerfile jdk1.8.0_91 run.sh
- // 确保 Dockerfile 文件中所需的东西全在这个目录下
- [[email protected] tomcat]# docker build -t tomcat:v1 .
- // 使用当前目录的 Dockerfile 文件生成名为 tomcat:v1 的镜像
6. 运行容器并验证
- [[email protected] tomcat]# docker run -dit -p 12344:8080 --name tomcat tomcat:v1
- // 使用新生成的进行创建一个名为 tomcat 的容器, 并将容器中的 8080 端口映射到宿主机的 12344 端口
- [[email protected] tomcat]# docker ps -a
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 1ffc46084d84 tomcat:v1 "/run.sh" 10 minutes ago Up 10 minutes 0.0.0.0:12344->8080/tcp tomcat
- // 确保容器已经启动, 并已经映射端口
访问测试:
tomcat 容器搭建完成!
三, 构建 MySQL 容器
MySQL 是当下最流行的关系型数据库, 所使用的 SQL 语言是用于访问数据库的最常用标准化语言, MySQL 具有体积小, 速度快, 成本低的优势, 成为中小型企业首选的数据库.
1. 下载基础镜像
- [[email protected] ~]# docker pull docker.io/lvzhenjiang/centos6
- // 下载 centos6 的基础镜像作为构建 MySQL 的基础镜像
2. 创建工作目录
- [[email protected] ~]# mkdir MySQL
- [[email protected] ~]# cd MySQL/
3. 创建 Dockerfile 文件
- [[email protected] MySQL]# VIM Dockerfile
- FROM lvzhenjiang/centos6 // 基础镜像
- MAINTAINER lzj // 维护者信息
- RUN yum -y install MySQL MySQL-server // 安装 MySQL
- RUN /etc/init.d/mysqld start && MySQL -e "grant all privileges on *.* to'root'@'%'identified by'123456';"&&MySQL -e "grant all privileges on *.* to'root'@'localhost'identified by'123456';"
- // 启动 MySQL 服务, 并授权用户
- EXPOSE 3306 // 开启 3306 端口
- CMD ["mysqld_safe"] // 使用 MySQL 自带的启动脚本启动服务
4. 生成镜像
- [[email protected] MySQL]# ls
- Dockerfile
- [[email protected] MySQL]# docker build -t MySQL:v1 .
- // 使用当前目录下的 Dockerfile 文件生成名为 MySQL:v1 的镜像
5. 创建容器并测试
- [[email protected] MySQL]# docker run -dit -p 12343:3306 --name=MySQL MySQL:v1
- // 使用 MySQL:v1 的镜像生成一个名为 MySQL 的容器, 并映射容器中的 3306 端口都宿主机的 12343 端口
- [[email protected] MySQL]# docker ps -a
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- c356d5b35167 MySQL:v1 "mysqld_safe" 4 seconds ago Up 3 seconds 0.0.0.0:12343->3306/tcp
- // 确认容器已经正常运行, 并已经启动端口映射
宿主机进行测试:
- [[email protected] ~]# yum -y install MySQL // 首先安装 MySQL 命令
- [[email protected] ~]# MySQL -u root -h 127.0.0.1 -P 12343 -p123456
- Welcome to the MariaDB monitor. Commands end with ; or \g.
- Your MySQL connection id is 1
- Server version: 5.1.73 Source distribution
- Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
- Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
- MySQL [(none)]>
- // 访问成功
MySQL 容器搭建完成!
来源: http://www.bubuko.com/infodetail-3293195.html