Docker实践
前提条件
目前,CentOS 仅发行版本中的内核支持Docker。
Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为3.10 以上。
Docker 运行在 CentOS-6.5 或更高的版本的CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。
Linux安装
1 查看Linux系统发行版
2所用系统版本信息:
3 安装
yum -y install docker-io
4 验证安装成功
5 安装版本command
6 启动docker后台服务
service docker start
实例
一:hello-world
1 测试运行hello-world
docker run hello-world
如果本地没有hello-world这个镜像,会下载一个hello-world的镜像,并在容器内运行。
2 查看容器
# 列出本机正在运行的容器
docker ps
# 列出本机所有容器,包括终止运行的容器
docker ps –a
# 显示最新启动的一个容器(包括已停止的)
docker ps -l
二 : springboot jar式启动
1 创建新系统镜像springboot/springboot-docker
#查看本机docker镜像
常用命令:
service docker start
service docker restart
service docker stop
docker start [NAME]/[CONTAINER ID]:将容器启动。
docker restart [NAME]/[CONTAINER ID]:将容器重启。
docker stop [NAME]/[CONTAINER ID]:将容器退出。
docker kill [NAME]/[CONTAINER ID]:强制停止一个容器。
docker rm [NAME]/[CONTAINER ID]:不能够删除一个正在运行的容器,会报错。需要先停止容器。
docker rmi -f [NAME]/[IMAGE ID IMAGE ID]:删除1个或多个镜像,多镜像中间用空格表示,-f为表示强制
2.1 启动docker镜像(-d为后台运行 image id或repository)
其中第一个端口8088为暴露可访问端口,后端口为创建系统镜像时的端口,省略端口映射无法正常访问。
docker run -d -p 8088:8080 -it 94ebcce97857
2.2另一种启动方式(自动生成暴露端口号)
[aaa@qq.com web]$ docker run -d -p 8080 --name myweb 520
de39869a8c560e5e0cf48fc6022c05ed9f9a145bdafb897767fa468dc24ebfff
[aaa@qq.com web]$ docker port de3
8080/tcp -> 0.0.0.0:32768
[aaa@qq.com rzlinux web]$
这样就要通过http://宿主机IP:32768访问了。
#填坑
docker启动web事例报错:
Error response from daemon: Cannot start container web: iptablesfailed: iptables -t nat -A DOCKER -p tcp -d 0/0 --dport 32797 -j DNAT--to-destination 172.17.0.30:5000 ! -i docker0: iptables: No chain/target/matchby that name.
解决:
方法一: 依次执行下列命令即可
pkill docker
iptables -t nat -F
ifconfig docker0 down
brctl delbr docker0
docker -d
service docker restart 或systmctlrestart docker(centeros7时)
方法二: https://ystyle.top/2015/09/24/centos-7-docker-qi-dong-bao/
三:Docker安装Tomcat镜像并部署web项目
一、 安装tomcat
1、查找Docker Hub上的tomcat镜像
docker search tomcat
2、拉取官方的镜像
docker pull tomcat
3、查看docker所有的镜像
docker images
4、启动tomcat镜像
注:前者是外围访问端口:后者是容器内部端口
注:前者是外围访问端口:后者是容器内部端口
如下命令可后台启动tomcat
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
docker run –itd -p 8080:8080 tomcat
5、查看正在运行的容器
docker ps
二、向Tomcat部署自己的web项目
1、上传war包
2、创建并编辑”Dockerfile”(),内容如下:
from tomcat #你的 tomcat的镜像
MAINTAINER ***@163.com #作者
COPY dockerwar.war /usr/local/tomcat/webapps/ #放置到镜像tomcat的webapps目录***意webapps不可省略,否则可能会出现该路径不是一个文件夹错误)
3、生成新的镜像(根据Dockerfile文件)
docker build -t dockerwar:v1.0 .
-t:表示为当前镜像命名。
.(最后的点):表示当前目录
☆ 根据某个“容器 ID”来创建一个新的“镜像”:
docker commit 89a47b5b749e dockerwar:v2.0
4、启动新的镜像
docker run -p 8080:8080 dockerwar:v1.0
5、查看已启动镜像
可以加上参数-itd后台启动tomcat,用以下方式查看已启动的镜像
docker ps
6、查看tomcat中的项目
docker exec -it CONTAINER_ID /bin/bash
7、输入ip和端口进行查看
输入http://宿主机IP:对外映射暴露端口号 进行访问
8、可以查看指定容器的log
docker logs -f 容器id
9、部署web项目后也许会出现docker容器与宿主、docker 容器与tomcat 应用打印日志时间和我们当前时间相差8个小时,可以添加如下配置:
①启动容器时,将系统时间挂载到容器内,可以解决docker容器与宿主时间不一致问题,如下所示:
添加参数
-v /etc/localtime:/etc/localtime:ro
完整命令如下示例:
sudo docker run -d --name button-api -p 8080:8080 -v/etc/localtime:/etc/localtime:ro button-api:v1
②docker 容器与tomcat 应用打印日志时间不一致
启动tomcat容器后进入tomcat的”bin”目录,修改catalina.sh文件
在注释结束的第一行添加如下内容:
JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF8 -Duser.timezone=GMT+08"
修改保存后重启docker容器就可以了。
重启方法:
“docker ps”查询容器id,使用如下命令重启:
docker restart 容器id
到此即可解决该问题。
# 填坑,进入tomcat/bin下,编辑catalina.sh时,
Docker:bash: vim: command not found
见: docker部署tomcat应用:
https://blog.csdn.net/qq_26709459/article/details/80475068
https://blog.csdn.net/evankaka/article/details/50722788
三 更新web项目
#填坑Docker cp error: Path not specified
原因: 版本1.8下不允许从主机复制到容器。
见 https://*.com/questions/39397831/docker-cp-error-path-not-specified
上一篇: nginx解决跨域
下一篇: Nginx反向代理及负载均衡搭建