Docker(一)Linux下Docker卸载与安装

预热篇

注意:如果登录linux已经是root权限了就不用在命令前加sudo了。

一、卸载之前的docker

$sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

二、docker-ce安装

$sudo yum install -y yum-utils device-mapper-persistent-data lvm2
$sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
$sudo yum makecache fast
$sudo yum -y install docker-ce

三、启动docker-ce

$sudo systemctl start docker

四、docker常用命令

命令 含义 实例
docker images 查看所有镜像 docker images
docker ps -a 查看容器 docker ps -a
docker rmi 镜像ID 删除某个镜像 docker rmi 383401d398fa
docker rmi $(docker images -q) 删除所有镜像 docker rmi $(docker images -q)
docker stop 容器 ID 停止某个容器 docker stop 383401d398fa
docker rm 容器 ID 删除某个容器 docker rm 383401d398fa
docker restart 容器 ID 重启某个容器 docker restart 383401d398fa
docker stop $(docker ps -a -q) 停止所有容器 docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q) 删除所有容器 docker rm $(docker ps -a -q)
docker build -t springboot . 通过Dockerfile构建镜像 docker build -t springboot .
docker run -itd --net=host -v /opt/:/opt/ --name app spring:latest 通过脚本构建容器并启动
docker logs -f -t --tail 100 容器 ID 查看日志 docker logs -f -t --tail 100 pay-master
docker history 镜像名 查看镜像构建历史 docker history mongo
docker exec -it -u root 容器ID bash 进入容器 docker exec -it -u root jenkins bash
Ctrl+d 退出docker容器 Ctrl+d
exit 退出docker容器 exit

实战篇

五、Dockerfile

FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG DEPENDENCY=target/dependency
RUN set -xe \ && apk --no-cache add ttf-dejavu fontconfig
ENV TIME_ZONE Asiz/Shanghai
ENV JAVA_OPTS="-server -Duser.timezone=GMT+08 -Djava.security.egd=file:/dev/./urandom"
ENTRYPOINT [ "/bin/sh", "-c", "sh /opt/app/start.sh" ]
  • FROM openjdk:8-jdk-alpine

docker引用的是 openjdk:8-jdk-alpine镜像

  • VOLUME /tmp

指向了一个/tmp的目录,由于 Spring Boot 使用内置的Tomcat容器,Tomcat 默认使用/tmp作为工作目录。这个命令的效果是:在宿主机的/var/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录

  • ARG DEPENDENCY=target/dependency

当解压插件执行完成后,target目录下会有一个dependency目录
.
├── BOOT-INF
│ ├── classes
│ └── lib
├── META-INF
│ ├── MANIFEST.MF
│ └── maven
└── org
└── springframework
ENTRYPOINT 最后一个参数是启动类

  • RUN set -xe \ && apk --no-cache add ttf-dejavu fontconfig

安装字体,Captcha需要字体支持

  • ENV TIME_ZONE Asiz/Shanghai

Docker容器设置上海时区,解决时区及时间同步问题

  • JAVA_OPTS="-server -Duser.timezone=GMT+08 -Djava.security.egd=file:/dev/./urandom"

引用环境变量,最终是传入容器里交付件的启动命令中

  • ENTRYPOINT [ “/bin/sh”, “-c”, “sh /opt/sh/start.sh” ]

脚本启动,指定启动的路径

  • ENTRYPOINT [“java”,"-jar","~/app.jar"]

不用脚本的启动方式

六、start.sh

#!/bin/bash

java $JAVA_OPTS -server -Xms400m -Xmx500m -Xmn400m -Duser.timezone=GMT+08 \
-Djava.security.egd=file:/dev/./urandom -jar /opt/app/app.jar \
--logging.level.=ERROR \
--spring.datasource.url=jdbc:mysql://localhost:3306/hibernate?useSSL=false \
--spring.datasource.username=root \
--spring.datasource.password=123456 \
--spring.redis.host=localhost \
--spring.redis.password=zzx123456 \
--spring.redis.port=6379 \

最后启动项目就能访问应用了

注意:这里我们用下面命令启动

 $docker run -itd --net=host -v /opt/netty/:/opt/ --name app spring:latest 

为什么?

我的jar包和start.sh脚本的真实路径如下
在这里插入图片描述
而我的Dockerfile执行bash脚本的路径是:/opt/app/start.sh
同样我的start.sh启动jar包的路径是:/opt/app/app.jar

看清楚了吧?

启动命令中/opt/netty/:/opt/表示用/opt/netty/路径去映射docker的/opt/路径

有什么好处?

当服务器需要管理多个应用时,我们将多个应用都放在/opt下方便管理,但不映射的话没法启动多个应用,所以这样做!

发布了55 篇原创文章 · 获赞 23 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Z_Vivian/article/details/91840800