准备
虚拟机
虚拟机安装 Docker
在纯净的 CentOS 镜像上搭建
CentOS 镜像准备
虚拟机上拉取 CentOS 镜像: docker pull CentOS
创建一个容器运行 CentOS 镜像: docker run -it -d --name mycentos CentOS /bin/bash
注: 这里遇到了一个错误 [WARNING: IPv4 forwarding is disabled. Networking will not work.]
更改虚拟机文件: VIM /usr/lib/sysctl.d/00-system.conf
添加如下内容
net.ipv4.ip_forward=1
重启网络: systemctl restart network
注: 这里又衍生一个问题, docker 中 systemctl 无法正常使用. 在官网找到如下解决办法
链接: https://forums.docker.com/t/systemctl-status-is-not-working-in-my-docker-container/9075/4
run 镜像的时候用如下语句
- docker run --privileged -v /sys/fs/cgroup:/sys/fs/cgroup -it -d --name usr_sbin_init_centos CentOS /usr/sbin/init
- # 注意几点
- #1. 必须有 --privileged
- #2. 必须有 - v /sys/fs/cgroup:/sys/fs/cgroup
- #3. 将 bin/bash 替换成 /usr/sbin/init
最后终于能够正常运行起来一个 CentOS 镜像了.
安装 JAVA 环境
准备 JDK tar 包上传到 虚拟机中
使用 docker cp 将 tar 包放入 docker 容器中
- docker cp jdk-11.0.2_linux-x64_bin.tar.gz 41dbc0fbdf3c:/
- # 与 Linux cp 指定用法相同, 需要加上 container 的标识: id 或者 name
解压 tar 包
tar -xf jdk-11.0.2_linux-x64_bin.tar.gz -C /usr/local/java/jdk
编辑 profile 文件 export java 环境变量
- # /etc/profile
- export JAVA_HOME=/usr/local/java/jdk/jdk1.8.0_91
- export PATH=$JAVA_HOME/bin:$PATH
- export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
运行 source /etc/profile, 使环境变量生效
检测是否成功
- java --version
- # 结果
- java 11.0.2 2019-01-15 LTS
- Java(TM) SE Runtime Environment 18.9 (build 11.0.2+9-LTS)
- Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.2+9-LTS, mixed mode)
安装 Tomcat
准备好 tomcat tar 包上传到虚拟机, 并 cp 到 docker 容器中
解压到
tar -xf apache-tomcat-8.5.38.tar.gz -C /usr/local/tomcat
设置开机启动, 通过使用 rc.local 文件实现
- #rc.local 增加如下代码
- export JAVA_HOME=/usr/local/java/jdk/jdk-11.0.2
- /usr/local/tomcat/apache-tomcat-8.5.38/bin/startup.sh
开启 tomcat
- # 到 / usr/local/tomcat/apache-tomcat-8.5.38/bin / 目录下 运行
- ./startup.sh
检测
- curl localhost:8080
- # 返回 html 源码内容
安装 MySQL
获取 MySQL 的 yum 源
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
安装上面的 yum 源
yum -y install mysql57-community-release-el7-10.noarch.rpm
yum 安装 MySQL
yum -y install MySQL-community-server
更改 MySQL 配置:/etc/my/cnf
- validate_password=OFF # 关闭密码验证
- character-set-server=utf8
- collation-server=utf8_general_ci
- log-error=/var/log/mysqld.log
- pid-file=/var/run/mysqld/mysqld.pid
- [client]
- default-character-set=utf8
获取 MySQL 初始密码
- grep "password" /var/log/mysqld.log
- # 结果:[Note] A temporary password is generated for root@localhost: k:nT<dT,t4sF
- # 使用这个密码登录 MySQL
进入到 MySQL, 进行操作
- # 进入
- MySQL -u root -p
- # 更改密码
- ALTER USER 'root'@'localhost' IDENTIFIED BY '111111';
- # 更改 使 MySQL 可以远端访问
- update user set host = '%' where user = 'root';
测试, 可以使用物理机, 使用 navicat 对 docker 中的 MySQL 进行访问
打包容器
放到 docker hub 上
- # 将容器提交成 镜像
- docker commit -a 'kane' -m 'test' container_id images_name:images_tag
- # 推到 dockerhub
- docker push kane0725/tomcat
到处本地 tar 包
- # 导出打成本地 tar 包
- docker export -o test.tar a404c6c174a2
- # 将 tar 包导入成镜像
- docker import test.tar test_images
使用 Dockerfile
注: 只搭建一个 tomcat 的镜像
准备工作
创建一个专门的文件夹, 放入 jdk 与 tomcat 的 tar 包
在这个目录下创建 Dockerfile 文件
CentOS 基础镜像
文件内容
- FROM CentOS
- MAINTAINER tomcat MySQL
- ADD jdk-11.0.2 /usr/local/java
- ENV JAVA_HOME /usr/local/java/
- ADD apache-tomcat-8.5.38 /usr/local/tomcat8
- EXPOSE 8080
使用 docker build 输出结果
- [root@localhost dockerfile]# docker build -t tomcats:CentOS .
- Sending build context to Docker daemon 505.8 MB
- Step 1/7 : FROM CentOS
- ---> 1e1148e4cc2c
- Step 2/7 : MAINTAINER tomcat MySQL
- ---> Using cache
- ---> 889454b28f55
- Step 3/7 : ADD jdk-11.0.2 /usr/local/java
- ---> Using cache
- ---> 8cad86ae7723
- Step 4/7 : ENV JAVA_HOME /usr/local/java/
- ---> Running in 15d89d66adb4
- ---> 767983acfaca
- Removing intermediate container 15d89d66adb4
- Step 5/7 : ADD apache-tomcat-8.5.38 /usr/local/tomcat8
- ---> 4219d7d611ec
- Removing intermediate container 3c2438ecf955
- Step 6/7 : EXPOSE 8080
- ---> Running in 56c4e0c3b326
- ---> 7c5bd484168a
- Removing intermediate container 56c4e0c3b326
- Step 7/7 : RUN /usr/local/tomcat8/bin/startup.sh
- ---> Running in 7a73d0317db3
- Tomcat started.
- ---> b53a6d54bf64
- Removing intermediate container 7a73d0317db3
- Successfully built b53a6d54bf64
docker build 的问题
一定要带上命令后面的 . 否则会报错的
"docker build" requires exactly 1 argument(s).
运行一个容器
- # 进入容器
- docker run -it --name tomcats --restart always -p 1234:8080 tomcats /bin/bash
- # 运行 tomcat startup.sh
- /usr/local/tomcat8/bin/startup.sh
- # 结果
- Using CATALINA_BASE: /usr/local/tomcat8
- Using CATALINA_HOME: /usr/local/tomcat8
- Using CATALINA_TMPDIR: /usr/local/tomcat8/temp
- Using JRE_HOME: /usr/local/java/
- Using CLASSPATH: /usr/local/tomcat8/bin/Bootstrap.jar:/usr/local/tomcat8/bin/tomcat-juli.jar
- Tomcat started.
使用 docker compose
安装 docker compose
官方: https://docs.docker.com/compose/install/
我选择的方式是 pip 安装
- # 安装
- pip install docker-compose
- # 检测
- docker-compose --version
- # -----------------------
- docker-compose version 1.23.2, build 1110ad0
编写 docker-compose.YAML
- # 这个 YAML 文件 搭建一个 MySQL 一个 tomcat 的容器
- version: "3"
- services:
- MySQL:
- container_name: MySQL
- image: MySQL:5.7
- restart: always
- volumes:
- - ./MySQL/data/:/var/lib/MySQL/
- - ./MySQL/conf/:/etc/MySQL/MySQL.conf.d/
- ports:
- - "6033:3306"
- environment:
- - MYSQL_ROOT_PASSWORD=********
- tomcat:
- container_name: tomcat
- restart: always
- image: tomcat
- ports:
- - 8080:8080
- - 8009:8009
- links:
- - MySQL:m1 #连接数据库镜像
注:
volumn 里必须是路径, 不能指定文件
tomcat 指定外部 conf 的时候一直创建不成功, 不知道为什么, 提示
- tomcat | Feb 20, 2019 2:23:29 AM org.apache.catalina.startup.Catalina load
- tomcat | WARNING: Unable to load server configuration from [/usr/local/tomcat/conf/server.xml]
- tomcat | Feb 20, 2019 2:23:29 AM org.apache.catalina.startup.Catalina start
- tomcat | SEVERE: Cannot start server. Server instance is not configured.
- tomcat exited with code 1
运行命令
注: 必须在 YAML 文件的目录下下执行
- docker-compose up -d
- # 结果 ---------- 查看 docker container-------
- [root@localhost docker-compose]# docker ps -a
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 1a8a0165a3a8 tomcat "catalina.sh run" 7 seconds ago Up 6 seconds 0.0.0.0:8009->8009/tcp, 0.0.0.0:8080->8080/tcp tomcat
- ddf081e87d67 MySQL:5.7 "docker-entrypoint..." 7 seconds ago Up 7 seconds 33060/tcp, 0.0.0.0:6033->3306/tcp MySQL
来源: https://www.cnblogs.com/primadonna/p/10411857.html