疫情期间,在家无事,拜读了docker官网,形成下面思维导图
1、Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。 通过 uname -r 命令查看你当前的内核版本 $ uname -r
2、使用 root 权限登录 Centos。确保 yum 包更新到最新。 $ yum update
3、卸载旧版本(如果安装过旧版本的话) $ yum remove docker docker-common docker-selinux docker-engine
4、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的 $ yum install -y yum-utils device-mapper-persistent-data lvm2
5、设置yum源 $ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo $ yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
6,安装最新版本的Docker $ yum install -y -y docker-ce docker-ce-cli containerd.io
7,启动Docker并设置开机启动 $ systemctl start docker $ systemctl enable docker
8,验证Docker $ docker version
9,Docker HelloWorld测试; $ docker run hello-world
阿里云镜像仓库 1,登录进入阿里云镜像服务中心,获取镜像地址 进入阿里云容器镜像服务地址: https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 2,在/etc/docker目录下找到在daemon.json文件(没有就新建),将下面内容写入 {
"registry-mirrors": ["https://xxxxxxx.mirror.aliyuncs.com"]
} 3,重启daemon systemctl daemon-reload
4,重启docker服务 systemctl restart docker
5,测试 速度会快很多
参考思维导图...
把tomcat8改一下,然后创建镜像docker commit
其它参考思维导图...
数据卷
docker run -di --name c2 -v /home/javaxl/data/:/home/javaxl/data/ centos:7
数据卷容器
docker run -di -v /home/javaxl/data/c4 --name c4 centos:7
docker run -di --volumes-from c4 --name c6 centos:7
Dockerfile是啥,命令的介绍及作用
相当于maven 的pom.xml,maven是通过pom.xml来管理工程的
通过它来test/install/clean...
Dockerfile是用来制作镜像的文件
from-->parent标签父工程
maintainer-->description
run--->maven install/packing。。
cmd-->容器启动会执行的命令(docker run hello-world-->会打印一长串的东西)
expose-->对外暴露的端口 8080/3306..
env-->指定环境变量 env java_home...
add-->官网下载jdk.tar.gz 传输文件如果是压缩包就会解压
copy-->只传输不解压
entrypoint-->优点类似cmd命令,区别cmd命令如果多条,那么只会执行最后一条,而这个全部会执行
volume-->docker run -di -v /home/javaxl/data/c4 --name c4 centos:7
user-->某个APP只能指定用户使用
workdir-->指定进入容器时的所在目录,容器的工作目录
onbuild-->当前镜像制作 定义的命令,到子镜像去执行
FROM centos:7 MAINTAINER javaxl "javaxl@qq.com" RUN yum -y install vim RUN yum install net-tools.x86_64 -y CMD /bin/bash
docker build -f mycentosDockerfile -t javaxl/centos:v1.0 .
自定义jdk8(官方没有提供jdk的镜像,我们后续部署分布式又需要jdk)
FROM centos:7 MAINTAINER javaxl "javaxl@qq.com" ENV workerDir /home/javaxl/dockerfile/2 WORKDIR $workerDir ADD jdk-8u151-linux-x64.tar.gz $workerDir ENV JAVA_HOME=$workerDir/jdk1.8.0_151 ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV PATH=$JAVA_HOME/bin:$PATH CMD ["java","-version"]
docker build -f myjdkDockerfile -t javaxl/jdk:v1.0 .
docker run -di --name mj1 javaxl/jdk:v1.0
自定义tomcat8(熟悉几乎所有的Dockerfile命令)
FROM centos:7 MAINTAINER javaxl "javaxl@qq.com" ENV workerDir /home/javaxl/dockerfile/3 WORKDIR $workerDir ADD jdk-8u151-linux-x64.tar.gz $workerDir COPY apache-tomcat-8.5.20.tar.gz $workerDir RUN tar -xvf apache-tomcat-8.5.20.tar.gz apache-tomcat-8.5.20 ENV JAVA_HOME $workerDir/jdk1.8.0_151 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV TOMCAT_HOME $workerDir/apache-tomcat-8.5.20 ENV PATH $JAVA_HOME/bin:$TOMCAT_HOME/bin:$TOMCAT_HOME/lib:$PATH EXPOSE 8080 ENTRYPOINT ["/home/javaxl/dockerfile/3/apache-tomcat-8.5.20/bin/catalina.sh","run"]
docker run -di --name mt1 -P javaxl/tomcat8:v1.0
volume、onbuild命令案例
FROM javaxl/centos:v1.0 MAINTAINER javaxl "javaxl@qq.com" ENV workerDir /home/javaxl/dockerfile/4 WORKDIR $workerDir VOLUME ["/home/javaxl/dockerfile/4/data"] ONBUILD RUN echo 'ONBUILD.......................show' ONBUILD ADD jdk-8u151-linux-x64.tar.gz $workerDir CMD /bin/bash
docker run -it --name mc7 javaxl/centos:v2.0
FROM javaxl/centos:v2.0 MAINTAINER javaxl "javaxl@qq.com" CMD /bin/bash
docker run -it --name mc8 javaxl/centos:v3.0
我们发现ONBUILD在父镜像构建的,在子镜像才执行,父镜像不执行
首先本地肯定分布式项目要跑通
java -jar flight-eureka-2001.jar --spring.profiles.active=eureka2001 java -jar flight-provider-1001.jar --spring.profiles.active=provider-hystrix-1001 java -jar flight-zuul-3001.jar
安装mysql容器
docker pull mysql:5.7 docker run -p 3307:3306 --name mysql1 -di -v /home/javaxl/data/mysql/mysql.conf.d/:/etc/mysql/mysql.conf.d/ -v /home/javaxl/data/mysql/data/:/var/lib/mysql -v /home/javaxl/data/mysql/log/:/var/log -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
制作注册中心的镜像
vi /etc/hosts 127.0.0.1 eureka2001.javaxl.com 127.0.0.1 eureka2002.javaxl.com 127.0.0.1 eureka2003.javaxl.com 127.0.0.1 zuul.javaxl.com 127.0.0.1 configserver.javaxl.com
FROM javaxl/jdk:v1.0 MAINTAINER javaxl "javaxl@qq.com" ENV workerDir /home/javaxl/dockerfile/5 WORKDIR $workerDir COPY flight-eureka-2001.jar $workerDir EXPOSE 2001 EXPOSE 2002 EXPOSE 2003 CMD java -jar flight-eureka-2001.jar --spring.profiles.active=eureka2001
docker run -it --name e1 -P javaxl/eureka-flight:v1.0
docker run -di --name e1 -p 2001:2001 javaxl/eureka-flight:v1.0
docker run -di --name e2 -p 2002:2002 javaxl/eureka-flight:v1.0 java -jar flight-eureka-2001.jar --spring.profiles.active=eureka2002
制作生产者的镜像、网关的镜像同样道理,我这里就省略...
docker pull redis:5
mysql/redis/nginx/tomcat/elasticsearch...
docker run -p 6379:6379 \ -v /home/javaxl/data/myredis/data:/data \ -v /home/javaxl/data/myredis/conf:/usr/local/etc/redis \ -di --name myredis redis:5 \ -- appendonly yes \ --requirepass "123456"
编写Dockerfile就是达到上面目的的基石
编写自己的Dockerfile文件可以参照别人的
https://github.com/docker-library/mysql/blob/d284e15821ac64b6eda1b146775bf4b6f4844077/5.7/Dockerfile
USER命令
指定运行容器时的用户名或 UID,后续的 RUN 也会使用指定用户。 当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户,例如:RUN groupadd -r postgres && useradd -r -g postgres postgres。要临时获取管理员权限可以使用 gosu,而不推荐 sudo。
默认的bridge以及host模式 docker run -di --name mt1 -p:8081:8080 javaxl/tomcat8:v1.0
docker run -di --name mt2 --net=host javaxl/tomcat8:v1.0
私有仓库搭建
docker pull registry docker run -d -v /home/javaxl/data/registry:/var/lib/registry -p 5000:5000 --name myregistry registry
http://192.168.195.136:5000/v2/_catalog
docker tag javaxl/jdk:v1.0 localhost:5000/javaxl/jdk:v1.0.1 docker push localhost:5000/javaxl/jdk:v1.0.1
http://192.168.195.136:5000/v2/_catalog
docker rmi -f localhost:5000/javaxl/jdk:v1.0.1 docker pull localhost:5000/javaxl/jdk:v1.0.1
阿里云镜像推送及拉取
阿里云官方网站链接:https://cr.console.aliyun.com/cn-hangzhou/instances/namespaces #2.登陆账户 #3.配置Docker加速器 注:搜索“容器镜像服务” #4.创建镜像仓库的命名空间 例如:javaxl #5.创建镜像仓库(创建镜像仓库时要绑定一个代码托管网站,例如:github)
#2. 从Registry中拉取镜像 $ sudo docker pull registry.cn-hangzhou.aliyuncs.com/javaxl/image-test:[镜像版本号] #3. 将镜像推送到Registry $ sudo docker login --username=javaxl registry.cn-hangzhou.aliyuncs.com $ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/javaxl/image-test:[镜像版本号] $ sudo docker push registry.cn-hangzhou.aliyuncs.com/javaxl/image-test:[镜像版本号] docker tag ecebe9f954a3 registry.cn-hangzhou.aliyuncs.com/javaxl/image-test:v1.0 docker push registry.cn-hangzhou.aliyuncs.com/javaxl/image-test:v1.0 docker rmi -f registry.cn-hangzhou.aliyuncs.com/javaxl/image-test:v1.0 docker pull registry.cn-hangzhou.aliyuncs.com/javaxl/image-test:v1.0
over...
备案号:湘ICP备19000029号
Copyright © 2018-2019 javaxl晓码阁 版权所有