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安装redis idea部署docker_idea docker安装redis


连接成功后可以使用idea远程管理docker服务、容器、镜像

找到idea的工具Service,在这里可以管理,并查看容器运行日志、信息等,

idea docker安装redis idea部署docker_jar_02

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构建镜像

idea docker安装redis idea部署docker_idea docker安装redis_03


运行构建镜像配置前,使用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 配置

idea docker安装redis idea部署docker_idea docker安装redis_04


运行参数

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"  指定时区