博客信息

Docker知识汇总

发布时间:『 2020-04-09 22:08』  博客类别:运维  阅读(800)

疫情期间,在家无事,拜读了docker官网,形成下面思维导图


小李飞刀_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

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-->当前镜像制作 定义的命令,到子镜像去执行


自定义centos,具备vim及ifconfig作用(体会学习Dockerfile的意义)


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 .

docker run -it --name mc1 javaxl/centos:v1.0 /bin/bash


自定义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 build -f mytomcatDockerfile -t javaxl/tomcat8:v1.0 .

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 build -f mycentosDockerfile -t javaxl/centos:v2.0 .

docker run -it --name mc7 javaxl/centos:v2.0


FROM javaxl/centos:v2.0
MAINTAINER javaxl "javaxl@qq.com"
CMD /bin/bash

docker build -f mycentosDockerfile2 -t javaxl/centos:v3.0 .

docker run -it --name mc8 javaxl/centos:v3.0


我们发现ONBUILD在父镜像构建的,在子镜像才执行,父镜像不执行


Dockerfile部署分布式项目(实际工作中会用)

首先本地肯定分布式项目要跑通

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 build -f eurekaDockerfile -t javaxl/eureka-flight:v1.0 .

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部署redis...

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"


通过以上学习,我们可以明白,以前Linux能够部署的应用,docker都能部署,并且更加便捷

编写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私有仓库

私有仓库搭建

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


阿里云镜像推送及拉取

#1.注册阿里云账户 阿里云官方网站链接:https://cr.console.aliyun.com/cn-hangzhou/instances/namespaces #2.登陆账户 #3.配置Docker加速器 注:搜索“容器镜像服务” #4.创建镜像仓库的命名空间 例如:javaxl #5.创建镜像仓库(创建镜像仓库时要绑定一个代码托管网站,例如:github) 例如:image-test


#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...


关键字:     运维       Docker  

备案号:湘ICP备19000029号

Copyright © 2018-2019 javaxl晓码阁 版权所有