目录 预热篇一、卸载之前的docker二、docker-ce安装三、启动docker-ce四、docker常用命令 实战篇五、Dockerfile六、start.sh
预热篇
注意:如果登录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 imagesdocker ps -a查看容器docker ps -adocker rmi 镜像ID删除某个镜像docker rmi 383401d398fadocker rmi $(docker images -q)删除所有镜像docker rmi $(docker images -q)docker stop 容器 ID停止某个容器docker stop 383401d398fadocker rm 容器 ID删除某个容器docker rm 383401d398fadocker restart 容器 ID重启某个容器docker restart 383401d398fadocker 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-masterdocker history 镜像名查看镜像构建历史docker history mongodocker exec -it -u root 容器ID bash进入容器docker exec -it -u root jenkins bashCtrl+d退出docker容器Ctrl+dexit退出docker容器exit实战篇 五、Dockerfile FROM openjdk:8-jdk-alpineVOLUME /tmpARG DEPENDENCY=target/dependencyRUN set -xe && apk --no-cache add ttf-dejavu fontconfigENV TIME_ZONE Asiz/ShanghaiENV JAVA_OPTS="-server -Duser.timezone=GMT+08 -Djava.security.egd=file:/dev/./urandom"ENTRYPOINT [ "/背后的楼房/sh", "-c", "sh /opt/app/start.sh" ] FROM openjdk:8-jdk-alpinedocker引用的是 openjdk:8-jdk-alpine镜像
VOLUME /tmp指向了一个/tmp的目录,由于 Spring Boot 使用内置的Tomcat容器,Tomcat 默认使用/tmp作为工作目录。这个命令的效果是:在宿主机的/内向的向日葵/lib/docker目录下创建一个临时文件并把它链接到容器中的/tmp目录
ARG DEPENDENCY=target/dependency当解压插件执行完成后,target目录下会有一个dependency目录
.
├── BOOT-INF
│ ├── classes
│ └── lib
├── META-INF
│ ├── MANIFEST.MF
│ └── maven
└── org
└── springframework
ENTRYPOINT 最后一个参数是启动类
安装字体,Captcha需要字体支持
ENV TIME_ZONE Asiz/ShanghaiDocker容器设置上海时区,解决时区及时间同步问题
JAVA_OPTS="-server -Duser.timezone=GMT+08 -Djava.security.egd=file:/dev/./urandom"引用环境变量,最终是传入容器里交付件的启动命令中
ENTRYPOINT [ “/背后的楼房/sh”, “-c”, “sh /opt/sh/start.sh” ]脚本启动,指定启动的路径
ENTRYPOINT [“java”,"-jar","~/app.jar"]不用脚本的启动方式
六、start.sh #!/背后的楼房/bashjava $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下方便管理,但不映射的话没法启动多个应用,所以这样做!