docker实践
环境准备
- 华为云 centos系统
- 本地已经正常使用, 需要部署到服务器并且需要用docker启动
- web容器使用weblogic10.3.6
- 本人的原始环境为archlinux
操作步骤
本地环境打包
- 注意: 采用本地环境为了省事, 本地环境包含整个的weblogic环境, 及jdk,
如果自己心情好完全可以再搭建一套
1 | tar -zcvf weblogic.tar.gz ~/Oracle #这个目录是weblogic的默认安装及建域目录, 相应的war包也在该目录下 |
上传到云服务器
上传打包好的文件
weblogic
1
2scp weblogic.tar.gz root@11x.xxx.xxx.xxx:/root
根据提示输入密码稍等上传完成jdk
1
2scp jdk.tar.gz root@11x.xxx.xxx.xxx:/root
根据提示输入密码稍等上传完成
解压, 找一个自己喜欢的目录,建议跟本地保持一致
在服务建立与本地一致的目录
1
mkdir ~/applications
解压文件
1
2tar -zxvf /root/weblogic.tar.gz -C ~
tar -zxvf /root/jdk.tar.gz -C ~/applications
在云服务器上配置启动web服务,
并通过弹性公网访问或者服务器本地确认服务启动正常进入domain目录启动服务验证
1
nohup ./startWeblogic.sh & tail -f nohup.out
使用docker容器启动
制作docker镜像
Dockerfile文件
touch ~/Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17#Dockerfile
# 基于centos构建本容器
FROM centos
# 跟本地映射的端口, 这里相当与访问本地7003会自动转发到容器中7003
EXPOSE 7003
#设置环境变量,所有操作都是非交互式的
ENV LANG en_US.UTF-8
ENV LC_ALL en_US.UTF-8
ENV DEBIAN_FRONTEND noninteractive
#可以安装软件
#RUN yum install xx
# 需要打到docker中的文件全部copy到docker对应的目录中, 本地目录是相对当前目录,不能写绝对路径, 后面这个路径最好加/
COPY . ~/
COPY cmd.sh /cmd.sh
# 容器启动后直接执行给定脚本
CMD sh /cmd.sh
#End制作镜像
进入目录 ~ 在目录 ~中目前存在
1
2
3
4drwxr-xr-x 3 root root 4096 Sep 30 10:49 applications
-rwxr-xr-x 1 root root 128 Sep 30 11:17 cmd.sh
-rw-r--r-- 1 root root 305 Sep 30 17:07 Dockerfile
drwxr-xr-x 3 root root 4096 Jul 14 18:39 Oracle执行命令 docker build -t payimage .
- 最后的点表示dockerfile在当前目录
查看存在镜像 docker images
1
2
3REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
payimage latest d7b3db0e1d59 15 hours ago 2.22 GB
centos latest c5507be714a7 7 weeks ago 199.7 MB
docker commit命令通过运行中容器制作镜像
1
docker commit pay7003 payimages:v1.0
启动容器
cmd.sh
1
2
3#!/bin/bash
domainname=$1 # 这里如果没有其他情况可以写死
nohup sh ~/Oracle/Middleware/user_projects/domains/$domainname/startWebLogic.sh > /7003.log & tail -f /7003.log通过上一步镜像启动
1
2
3
4
5
6
7
8
9docker run -itd --net=host --name pay7003 payimage sh /cmd.sh
命令解释:
-i:
-t:
-d: 保持,退出后不关闭docker
--name: docker容器的名称
payimage: 镜像名称
--net=host: 这个必须有,否则启动报错
sh /cmd.sh: 这个是容器启动会执行的命令, 以后docker start 也会执行该文件可以省略第一步操作直接制作容器启动, 不使用docfile直接制作镜像
1
2
3
4docker run itd -v weblogic:weblogic idk:jdk --net=host -p7003:7003 --name=pay7003 centos
上面的weblogic前后分别表示本地的目录和远程的目录
-v 可以达到dockfile中copy的效果
-p 表示端口映射容器管理
1
2
3docker start pay7003
docker stop pay7003
docker rm pay7003 #删除容器, 先stop再rm
连接容器,检查服务
查看现有容器
docker ps -a
1
2CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dc2eeca7873e payimage "sh /cmd.sh" 15 hours ago Exited (137) 15 hours ago pay7003
登录容器
1
2docker exec -it pay7003 bash #这里pay7003是容器name, 也可以使用容器id
通过该命令可以连接到容器pay7003的bash中, 跟正常操作cenos系统一样, 完成后exit即可
容器管理
大杀器片甲不留, 自己玩可以用
1 | docker kill $(docker ps -q) ; docker rm $(docker ps -a -q) ; docker rmi $(docker images -q -a) |
删除镜像
1 | docker rmi payimage |
问题处理
archlinux中启动docker实例报错
- systemctl start docker.service报错,直接使用systemctl enable
docker.service重启机器正常
docker镜像持久化到本地(待测试)
- 有的项目太大了,而且是公司内部使用不合适到公网
- docker save java -o ./java.tar
- copy到其他伙伴机器后可以使用: docker load -i java.tar,
加载到对方容器中 - 参考: https://segmentfault.com/a/1190000006843830
docker到底能干个啥?
- 在团队内部构建本地的仓库,标准化所有的开发环境,使得团队的新人可以快速上手
- 在生产环境部署Docker,这其实是PaaS的虚拟化和自动化的一种方式,利用LXC和Docker能够更便捷地实施PaaS
- 尝试用Docker做分布式集群模拟和测试,成本会更加低廉,更加容易维护
- 参考:
https://www.csdn.net/article/2014-06-19/2820312-Docker-lxc-paas-virtualization