512 字
3 分钟
Docker 简单实战
2017-01-19

docker

从零开始部署 Java Web 应用

安装 docker(Linux)#

  • yum install docker 不同系统安装命令可能不同
  • service docker start 启动服务
  • chkconfig docker on 将 docker 加入开机启动
  • docker version 查看 docker 版本

下载 Tomcat 镜像#

  • docker pull tomcat:${version} 下载 tomcat 镜像
  • docker images 查看本地镜像

制作自己的镜像#

  • vim Dockerfile 编写 Dockerfile
FROM tomcat:${version}
ADD ${yourApp.war} /usr/local/tomcat/webapps/
#修正语言乱码和时间错误
ENV LANG en_US.UTF-8
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
CMD ["catalina.sh", "run"]
  • docker build -t ${yourImageName} . 制作镜像

运行 Docker 容器#

docker run --name ${containerName} -d -p 8080:8080 ${yourImageName} 参数 --name 后跟自定义的唯一别名,参数 -d 表示后台运行,参数 -p 表示端口映射 HOST_PORT

需要注意端口映射的 -p 参数中,前面的端口是宿主机的端口(HOST_PORT),冒号后面的端口是容器的端口(CONTAINER_PORT),例如 docker run -d -p HOST_PORT:CONTAINER_PORT nginx

常用命令#

  • docker ps -a 查看所有容器,参数 -a 表示显示所有容器,不加参数只显示运行中的容器
  • docker logs ${containerName} 查看容器日志
  • docker inspect ${containerName} 检查容器
  • docker diff ${containerName} 查看容器文件变化
  • docker exec -t ${containerName} date 查看容器时间
  • docker cp /etc/localtime ${containerName}:/etc/localtime 通过拷贝本机的时区文件到容器修正时区错误
  • curl localhost:8080 可以用这个命令快速进行访问测试

绑定 data volume#

为了方便部署也可以使用参数 -v 绑定宿主机文件或文件夹 docker run --name ${yourContainerName} -d -p 8080:8080 -v ${path/yourApp.war}:/usr/local/tomcat/webapps/your.war tomcat:\${version}

和端口规则一样,前面的是宿主机的路径,后面的是容器的路径

运行 mysql 容器#

docker run --name ${yourContainerName} -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=${yourPassword} mysql:\${version}

最终部署命令#

用于连接的 mysql#

docker run --name mysql -d -v /home/username/data:/var/lib/mysql -v /home/username/my.cnf:/etc/mysql/my.cnf:ro -e MYSQL_ROOT_PASSWORD=test mysql:5.7

tomcat 连接 mysql#

docker run --name tomcat_mysql --link mysql:link_mysql -d -p 8089:8080 -v /home/usrename/logs:/usr/local/tomcat/logs -v /home/username/webapps:/usr/local/tomcat/webapps/ tomcat:9

对于连接的容器,可以对父容器使用docker exec ${yourContainerName} env查看环境变量,或者查看 host 文件docker exec ${yourContainerName} cat /etc/hosts得到连接容器信息

用于管理的 mysql#

docker run --name mysql -d -p 3306:3306 -v /home/username/data:/var/lib/mysql -v /home/username/my.cnf:/etc/mysql/my.cnf:ro -e MYSQL_ROOT_PASSWORD=test mysql:5.7

Docker 简单实战
https://www.waterwater.moe/posts/2017/2017-01-19_docker简单实战/
作者
whitewater
发布于
2017-01-19
许可协议
CC BY-NC-SA 4.0