idea + docker+maven 远程制作镜像并部署(docker安装卸载)
1. docker安装
# step 1: 安装必要的一些系统工具
[root@xxx ~]:# sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
[root@xxx ~]:# sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新并安装 Docker-CE
[root@xxx ~]:# sudo yum makecache fast
[root@xxx ~]:# sudo yum -y install docker-ce
# Step 4: 开启Docker服务
[root@xxx ~]:# sudo systemctl start docker
# Step 5: 查看Docker服务状态
[root@xxx ~]:# sudo systemctl status docker
# 注意:其他注意事项在下面的注释中
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,你可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ce.repo
# 将 [docker-ce-test] 下方的 enabled=0 修改为 enabled=1
#
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
# Loading mirror speeds from cached hostfile
# Loaded plugins: branch, fastestmirror, langpacks
# docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable
# docker-ce.x86_64 17.03.1.ce-1.el7.centos @docker-ce-stable
# docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable
# Available Packages
# Step2 : 安装指定版本的Docker-CE: (VERSION 例如上面的 17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]
# 注意:在某些版本之后,docker-ce安装出现了其他依赖包,如果安装失败的话请关注错误信息。例如 docker-ce 17.03 之后,需要先安装 docker-ce-selinux。
# yum list docker-ce-selinux- --showduplicates | sort -r
# sudo yum -y install docker-ce-selinux-[VERSION]
# 通过经典网络、VPC网络内网安装时,用以下命令替换Step 2中的命令
# 经典网络:
# sudo yum-config-manager --add-repo http://mirrors.aliyuncs.com/docker-ce/linux/centos/docker-ce.repo
# VPC网络:
# sudo yum-config-manager --add-repo http://mirrors.could.aliyuncs.com/docker-ce/linux/centos/docker-ce.repo
# 校验
[root@xxx ~]:# docker version
Client:
Version: 17.03.0-ce
API version: 1.26
Go version: go1.7.5
Git commit: 3a232c8
Built: Tue Feb 28 07:52:04 2017
OS/Arch: linux/amd64
Server:
Version: 17.03.0-ce
API version: 1.26 (minimum version 1.12)
Go version: go1.7.5
Git commit: 3a232c8
Built: Tue Feb 28 07:52:04 2017
OS/Arch: linux/amd64
Experimental: false
## 链接 https://developer.aliyun.com/article/110806
2.卸载docker
[root@xxx ~]:# yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
[root@xxx ~]:# rm -rf /etc/systemd/system/docker.service.d
[root@xxx ~]:# rm -rf /var/lib/docker
[root@xxx ~]:# rm -rf /var/run/docker
3. docker 开启远程访问
[root@xxx docker]# vim /usr/lib/systemd/system/docker.service
#修改ExecStart这行
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
#重新加载配置文件
[root@xxx docker]# systemctl daemon-reload
#重启服务
[root@xxx docker]# systemctl restart docker.service
#查看端口是否开启
[root@xxx docker]# netstat -nptl
[root@xxx docker]# netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 15455/docker-proxy
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 7457/docker-proxy
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 12645/docker-proxy
tcp6 0 0 :::80 :::* LISTEN 15463/docker-proxy
tcp6 0 0 :::22 :::* LISTEN 1214/sshd
tcp6 0 0 :::2375 :::* LISTEN 7306/dockerd
tcp6 0 0 :::3306 :::* LISTEN 7463/docker-proxy
tcp6 0 0 :::6379 :::* LISTEN 12629/docker-proxy
#直接curl看是否生效
[root@xxx docker]# curl http://127.0.0.1:2375/info
如果是阿里云服务器则需要配置端口安全规则,运行访问2375端口。
4.idea安装docker插件
专业版是自带了,没有则直在Plugins安装即可,并测试远程连接docker是否成功。
连接成功后可以使用idea远程管理docker服务、容器、镜像
找到idea的工具Service,在这里可以管理,并查看容器运行日志、信息等,
5.创建编辑DockerFile文件
#指定基础镜像,在其上进行定制
FROM java:8
#维护者信息
MAINTAINER lijia <2674lijia@gmail.com>
#这里的 /tmp 目录就会在运行时自动挂载为匿名卷,任何向 /data 中写入的信息都不会记录进容器存储层
#设置挂载点
VOLUME /tmp
VOLUME ["/home/file","/home/workspace/logs"]
#复制上下文目录下的target/demo-1.0.0.jar 到容器里
ADD target/aicp-0.0.1-SNAPSHOT.jar aicp-server.jar
#bash方式执行,使demo-1.0.0.jar可访问
#RUN新建立一层,在其上执行这些命令,执行结束后, commit 这一层的修改,构成新的镜像。
# RUN bash -c "touch /eureka-0.0.1.jar"
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/Shanghai" > /etc/timezone;
#声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务
EXPOSE 2674
#设置容器编码
#RUN yum install kde-l10n-Chinese -y
#RUN yum install glibc-common -y
#RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
#RUN export LANG=zh_CN.UTF-8
#RUN echo "export LANG=zh_CN.UTF-8" >> /etc/locale.conf
#ENV LANG zh_CN.UTF-8
#ENV LC_ALL zh_CN.UTF-8
#指定容器启动程序及参数 <ENTRYPOINT> "<CMD>"
ENTRYPOINT ["java","-Xmx512m","-Xms512m","-Duser.timezone=GMT+08","-jar","aicp-server.jar"]
6使用idea构建镜像
运行构建镜像配置前,使用maven打包,并保证DockerFileADD命令的jar包路径正确。运行后可以就生成了配置的镜像
[root@192 ~] docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
aicp-server latest 74d5870e7893 44 minutes ago 717MB
nginx latest 08b152afcfae 13 days ago 133MB
tomcat latest 36ef696ea43d 4 weeks ago 667MB
redis latest 08502081bff6 6 weeks ago 105MB
mysql 5.7 09361feeb475 6 weeks ago 447MB
java 8 d23bdf5b1b1b 4 years ago 643MB
[root@192 ~]
7运行容器
新增一个docker Image 配置
运行参数
docker run
-p 2674:2674
--name aicp-server
-v /home/workspace/logs:/home/workspace/logs
-v /home/file:/home/file
--network host
aicp-server
- -p 指定端口
- –name 指定名称
- -v 指定容器挂载点
- –network 指定网络,host 与主机一直
- -d 后台运行
8常见问题
8.1 docker 容器时区和宿主时区不一致导致时间不一样
方法1:
#使用命令进入容器
docker exec -it <容器名> bash
#修改时区
export TZ=Asia/Shanghai
方法2:
创建容器时指定时区
docker run --name <name> -v /etc/localtime:/etc/localtime:ro ....
方法3:
使用Dockerfile构建容器时指定运行
# CentOS
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/shanghai" > /etc/timezone;
# Ubuntu
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
8.2 docker启动spring boot 的项目jar包 容器时,因是使用内置的tomcat ,导致tomcat时区与宿主服务器时区不一致.
解决:docker bulid 使用DockerFile 构建镜像时 指定容器启动程序参数
ENTRYPOINT ["java","-Xmx512m","-Xms512m","-Duser.timezone=GMT+08","-jar","patient.jar"]
**注意:**使用nohup 命令启动jar包时, 则直接加 -Duser.timezone=GMT+08 即可
8.3 docker修改容器内的时区
- 方法1:进入容器 修改时区
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#重启该容器
- 方法2:启动指定时区
docker run -e TZ="Asia/Shanghai" -d -p 80:80 --name nginx nginx
# -e TZ="Asia/Shanghai" 指定时区