https://www.yuque.com/leifengyang/oncloud/mbvigg
移除以前docker相关包
sudo yum remove docker*
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
systemctl enable docker --now
这里额外添加了docker的生产环境核心配置cgroup
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
“registry-mirrors”:
[“https://82m9ar63.mirror.aliyuncs.com”]这里需要替换成自己的加速器地址





docker images

docker rmi 容器的IMAGE ID (如果id相同则以REPOSITORY:TAG代替容器的IMAGE ID)

docker ps -a
docker run --help :查看帮助
docker run 容器的IMAGE ID
—name:为运行的容器自定义名称 如 docker run --name myXXXXX 容器的IMAGE ID
-d :后台运行 如 docker run --name myXXXXX -d 容器的IMAGE ID
–restart=always :开启自启,如服务器宕机后重启,docker内的服务也会重启
docker run --name myXXXXX -d --restart=always 容器的IMAGE ID
如果最开始没有设置开机重启那么可以使用命令对镜像启动进行修改
docker update 容器的IMAGE ID --restart=always
-p :端口映射,如将主机的88端口映射到镜像的80端口上,那么通过公网ip:88即可访问容器中的80端口
docker run --name myXXXXX -d --restart=always -p 88:80 容器的IMAGE ID
docker ps -a
docker rm 容器的IMAGE ID
docker rm -f 容器的IMAGE ID
docker ps
docker stop 容器的IMAGE ID
docker ps -a
docker start 容器的IMAGE ID
docker ps
docker exec -it 容器的IMAGE ID /bin/bash

dcoker commit --help

-a:作者信息
-c:将Dockerfile指令应用于创建的映像
-m:修改后的内容备注
-p:提交期间暂停容器(默认为true)
如:dcoker commit -a “作者XXX” -m “修改了XXX” 容器的IMAGE_ID 自定义镜像名(字母必须小写)

再次启动直接启动提交后的镜像即可
docker save -o xxxx.tar 镜像id

docker load -i xxx.tar
docker cp 容器的IMAGE ID:/etc/nginx/nginx.conf(需要复制到服务器的文件路径) /usr/local/nginx/nginx.conf(复制到服务器的路径)
docker cp /usr/local/nginx/nginx.conf(服务器的文件路径) 容器的IMAGE ID:/etc/nginx/nginx.conf(容器的文件路径)
首先需要注册https://hub.docker.com/ 账号密码



首先将镜像打包:docker tag 镜像名:版本号 1309832337/docke(这里为你创建仓库的地址):版本号

然后使用命令在服务器中登录docker hub并推送
docker login
docker push 1309832337/docker:v1.0


登出docker hub命令:
docker logout

注:如果设置仓库是私有的那么在拉取时需要登录docker hub:docker login
删除在docker hub上创建的仓库


docker logs 容器的IMAGE ID
这里需要注意一点挂载方式类似于覆盖的方式,就是将容器内的指定目录文件挂载到镜像外部也就是服务器中,比如nginx的conf文件,将容器内的conf文件挂载到服务器中的文件夹中的/usr/local/nginx,这里需要保证/usr/local/nginx文件夹下需要有一个这样的conf文件,否则容器内的文件将会不存在
docker cp 容器的IMAGE ID:/etc/nginx/nginx.conf(需要复制到服务器的文件路径) /usr/local/nginx/nginx.conf(服务器的路径)
docker run --name myXXXXX -d --restart=always -p 88:80 -v /usr/local/nginx:/etc/nginx/nginx.conf:ro 容器的IMAGE ID
-v 挂载到服务器的哪个目录下:容器内需要挂载的哪个文件:ro(镜像容器内该文件不能更改,rw为可以更改)
#指定镜像jdk版本
FROM openjdk:8-jdk-alpine
#指定作者名
LABEL maintainer=ys
#将target下的jar文件更名为app.jar
COPY target/*.jar /app.jar
#jar包启动命令
ENTRYPOINT ["java","-jar","/app.jar"]

将项目中的这两个文件上传到服务器 target文件夹中只需包含jar文件即可


在该目录下执行命令(这里的 . 代表在当前目录下执行):
docker build -t pay:v1.0 .

使用docker run 命令启动即可
docker pull redis
mkdir /data/redis
touch redis.conf
docker run -v /data/redis/redis.conf:/etc/redis/redis.conf -v /data/redis/data:/data -d -p 10999:6379 --name myredis redis redis-server /etc/redis/redis.conf
设置redis密码:redis.conf (添加密码:requirepass 123456789,持久化:appendonly yes)
重启redis镜像即可
修改Dokcer 允许远程连接
vi /usr/lib/systemd/system/docker.service
1:将ExecStar属性修改为
2:8849 为连接开放端口,根据个人情况修稿
ExecStart=/usr/bin/dockerd-current -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

重新读取配置文件
systemctl daemon-reload
重新启动Docker
systemctl restart docker
注:建议指定ip不要使用0.0.0.0否则服务器会判定你在做挖矿,会自动关闭你的服务器


pom.xml 添加配置
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<!--将插件绑定在某个phase执行-->
<executions>
<execution>
<id>build-image</id>
<!--将插件绑定在package这个phase上。也就是说,
用户只需执行mvn package ,就会自动执行mvn docker:build-->
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
<configuration>
<!--指定生成的镜像名,这里是我们的项目名-->
<imageName>${project.artifactId}</imageName>
<!--指定标签 这里指定的是镜像的版本,我们默认版本是latest-->
<imageTags>
<imageTag>latest</imageTag>
</imageTags>
<!-- 指定我们项目中Dockerfile文件的路径-->
<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
<!--指定远程docker 地址-->
<dockerHost>http://ip地址:2375(端口号)</dockerHost>
<!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
<resources>
<resource>
<targetPath>/</targetPath>
<!--jar包所在的路径 此处配置的即对应项目中target目录-->
<directory>${project.build.directory}</directory>
<!-- 需要包含的 jar包 ,这里对应的是 Dockerfile中添加的文件名 -->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
在src/main/docker目录下创建Dockerfile文件

# 安装jdk8
FROM java:8
#因为这是Spring Boot应用程序默认为Tomcat创建工作目录的地方。效果是在“/var/lib/docker”下的主机上创建一个临时文件,并将其链接到“/ tmp”下的容器。
#对于我们在此处编写的简单应用程序,此步骤是可选的,但如果需要在文件系统中实际编写,则对于其他Spring Boot应用程序可能是必需的。
VOLUME /tmp
# 版本
LABEL version=V1.0
# 作者
MAINTAINER ys
# jar包更名为app.jar
ADD *.jar app.jar
# docker端口号
EXPOSE 2375
# 启动jar 为了减少Tomcat的启动时间,我们添加了一个指向“/dev/urandom”的系统属性作为熵源。
# 如果您使用Tomcat(或任何其他Web服务器)的“标准”版本,则不需要更新版本的Spring Boot。
ENTRYPOINT [ "java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app.jar" ]



如果没有出现这个窗口

创建容器,项目部署到docker
我们在docker窗口中,找到我们刚才创建的镜像文件,鼠标右键,选择Create container,我们修改创建容器所需要的配置。

在Create Docker Configuration弹窗中修改Container name(容器名称) Bind ports(Ip和端口映射)
我在这里添加9001:8080. 使用服务器的9001端口,去访问容器(服务)的8080

我们点击Run之后,就会自动创建容器并启动。
我们可以看到在docker插件中,多出了一个容器,并且启动成功

再次打包后会替换

参考:
idea 使用docker插件,实现一键自动化部署。