上一篇 【Docker】一、云时代容器Docker的基本操作
文章目录- 一、安装常用镜像实例
- 1、Docker 安装 MySQL
- 2、Docker的Tomcat容器部署web项目
- 二、Docker容器的修改
- 1、保存修改后的容器
- 2、Docker镜像保存为文件与从文件导入镜像
- 三、Docker搭建私有仓库
- 1、私有仓库搭建
- 1.1、可配置加速器加速下载
- 1.2、获取镜像加速器地址
- 1.3、下载registry镜像:
- 1.4、启动镜像:
- 1.5、然后可以通过restful接口查看仓库中的镜像(当前仓库是空的)
- 2、私服仓库推送镜像
- 3、保存镜像为文件
- 四、Docker自定义镜像
- 1、Dockerfile文件
- 2、Dockerfile的基本结构
- 3、Dockerfile指令
- 4、自定义JDK镜像
- 5、自定义Tomcat镜像
- 五、Docker部署微服务
- 1、Docker部署SpringBoot项目
- 2、定义Jar包程序Dockerfile文件
- 3、Docker部署War包SpringBoot程序
- 4、Maven源码构建Docker镜像部署微服务
- 5、IntelliJ IDEA下的Docker
- 六、私有Docker仓库镜像下载
- 1、 在拉取仓库镜像的机器上配置加速器和仓库地址:
- 2、修改上面的配置后需要重启一下Docker;
- 3、推送一个镜像到私有仓库:
- 4、然后才能从仓库拉取
- 下载MySQL镜像:
docker pull docker.io/mysql:latest (安装的是mysql 8.0) docker run -d -p 3306:3306 -e MYSQL_DATABASE=workdb -e MYSQL_ROOT_PASSWORD=123456 mysql:latest
其中-e是指定环境变量
- 进入容器:
docker exec -it 3e8bf7392b4e /bin/bash
看容器里面的mysql在什么位置:whereis mysql
- 登录MySQL:
mysql -u root -p
- 修改密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
- 授权远程登录访问:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; GRANT ALL PRIVILEGES ON *.* TO ' root'@'%'; FLUSH PRIVILEGES;
容器是瞬态的。重启了容器,数据就没了;
- 数据持久化
docker run -d -p 3306:3306 -v /opt/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:latest
- /opt/mysql/data 是宿主机的路径
/var/lib/mysql 是容器的路径
docker run -d -p 8080:8080 docker.io/tomcat docker cp /root/test.html bf8a58328e18:/usr/local/tomcat/webapps/ROOT
- 数据持久化
docker run -d -p 8080:8080 -v /opt/tomcat/data:/usr/local/tomcat/webapps docker.io/tomcat二、Docker容器的修改 1、保存修改后的容器
docker commit 容器id xxx(镜像名:tagxxx) 比如:docker commit 90343fa54080 my_tomcat docker commit 90343fa54080 my_tomcat:latest
把一个运行着的容器,由于里面改了一些东西,希望把该容器保存起来,可以使用上面这种做法,得到一个新镜像,下次用该新镜像运行;
(镜像是一个模板);
制作好镜像后,有时需要将镜像复制到另一台服务器使用,那么有两种方式:
一种是上传镜像到仓库中(本地仓库或远程公共仓库)
一种是将镜像保存为文件然后传到其他服务器上,再从文件中载入镜像;
可以使用Docker save和Docker load命令来存储和载入镜像。
/etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
1.2、获取镜像加速器地址
1.3、下载registry镜像:
docker pull registry docker pull docker.io/registry 这两个一样1.4、启动镜像:
docker run -d -p 5000:5000 registry
在这里插入代码片1.5、然后可以通过restful接口查看仓库中的镜像(当前仓库是空的)
http://127.0.0.1:5000/v2/_catalog2、私服仓库推送镜像
docker tag [imageId] 127.0.0.1:5000/cat/redis:latest
1、docker tag 6408fdc94212 127.0.0.1:5000/cat/tomcat:latest 2、docker push 127.0.0.1:5000/cat/tomcat:latest
- 执行命令效果
[root@server docker]# docker tag 6408fdc94212 127.0.0.1:5000/cat/tomcat:latest [root@server docker]# [root@server docker]# docker push 127.0.0.1:5000/cat/tomcat:latest The push refers to a repository [127.0.0.1:5000/cat/tomcat] cd5b7e2631fa: Pushed 9f99f85da76a: Pushed 2c17ac16afc6: Pushed 2ee490fbc316: Pushed b18043518924: Pushed 9a11244a7e74: Pushed 5f3a5adb8e97: Pushed 73bfa217d66f: Pushed 91ecdd7165d3: Pushed e4b20fcc48f4: Pushed latest: digest: sha256:8e75a9065fd732f2d06fccba994b246d77360b6e9870ac02b60b5b7d1fc6007d size: 2422 [root@server docker]#
- 查询镜像:
http://127.0.0.1:5000/v2/_catalog - 查询刚才上传的镜像的版本
http://127.0.0.1:5000/v2/cat/tomcat/tags/list
启动容器的时候,也可以通过 --name指定容器的名字
docker run -d --name mytomcat -p 8080:8080 my_tomcat‘
如果要将镜像保存为本地文件,使用docker save命令;
docker save -o 要保存的文件名 要保存的镜像
查看已有镜像:docker images
保存镜像为文件: docker save -o redis.tar.gz docker.io/redis
完成后通过 ls 命令查看保存的文件在当前目录下;
把保存的此文件上传到另一台服务器上;
从文件载入镜像
从压缩文件载入镜像使用docker load命令; docker load --input 文件 或者 docker load < 文件名
导入后可以使用docker images命令查看;
四、Docker自定义镜像 1、Dockerfile文件Dockerfile用于构建Docker镜像,Dockerfile文件是由一行行命令语句组成,基于这些命令即可以构建一个镜像;
2、Dockerfile的基本结构一般的,Dockerfile分为四部分:
- 基础镜像信息;
- 维护者/作者信息;(可选部分)
- 镜像操作指令;
- 容器启动时执行指令;
比如下面就是一个Dockefile文件样例:
FROM centos:latest MAINTAINER docker_user ENV JAVA_HOME /usr/local/java ADD apache-tomcat-8.0.32.tar.gz /usr/local/ RUN mv apache-tomcat-8.0.32 tomcat8 EXPOSE 8080 RUN chmod u+x /usr/local/tomcat8/bin/*.sh CMD /usr/local/tomcat8/bin/catalina.sh start3、Dockerfile指令
- ROM
格式为 FROM 或 FROM :
Dockerfile文件的第一条指令必须为 FROM 指令,表示从哪个基础镜像开始构建; - MAINTAINER
格式为 MAINTAINER ,可选的,指定维护者/作者信息; - ENV
格式为 ENV ,指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持; - ADD
格式为ADD ;
复制指定的宿主机上的到容器中的(能够进行自动解压压缩包); - EXPOSE
格式为 EXPOSE[ ...]
告诉 Docker 服务端容器暴露的端口号,供互联系统使用,在启动容器时需要通过 -p映射端口,Docker 宿主机会自动分配一个端口转发到指定的端口; - RUN
格式为 RUN
RUN 指令将在当前镜像基础上执行指定命令,并提交为新的镜像,当命令较长时可以使用 来换行,如果需要将两条命令或者多条命令联合起来执行需要加上&&;
如:cd /usr/local/src && wget xxxxxxx; - CMD
指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令,如果指定了多条命令,只有最后一条会被执行。
如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。 - WORKDIR:
用来指定当前工作目录(或者称为当前目录) - USER:
运行RUN指令的用户 - VOLUME:
用来创建一个在image之外的mount point
- 定义Dockerfile文件:
FROM centos:latest MAINTAINER cat ADD jdk-8u191-linux-x64.tar.gz /usr/local/java ENV JAVA_HOME /usr/local/java/jdk1.8.0_191 ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar ENV PATH $PATH:$JAVA_HOME/bin CMD java -version
构建镜像:docker build -t my_jdk1.8.0_191 .
运行镜像:docker run -d ac84bde53958 (镜像id)
- 定义Dockerfile文件:
FROM my_jdk1.8.0_191 MAINTAINER cat ADD apache-tomcat-9.0.29.tar.gz /usr/local/ ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.29 ENV PATH $PATH:$CATALINA_HOME/lib:$CATALINA_HOME/bin EXPOSE 8080 CMD /usr/local/apache-tomcat-9.0.29/bin/catalina.sh run
构建镜像:docker build -t my-tomcat-9.0.29 .
运行镜像:docker run -d -p 8080:8080 7db5d55cd5c4
- 1、将开发的springboot程序打成jar包或者war包;
- 2、将打好的jar包或war包上传到Linux某个目录下,比如:/root/docker
- 3、定义Dockerfile文件,用于创建项目镜像;
FROM my_jdk1.8.0_191 MAINTAINER cat ADD springboot-web-1.0.0.jar /opt RUN chmod +x /opt/springboot-web-1.0.0.jar CMD java -jar /opt/springboot-web-1.0.0.jar
构建和运行Jar包程序的镜像
构建镜像:docker build -t springboot-web-jar .
运行容器:docker run -d -p 8080:8080 ac84bde53958
- Jar包程序依赖容器环境准备
运行MySQL容器:docker run -p 3306:3306 -e MYSQL_DATABASE=workdb -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
运行Docker化的Jar包程序,通过windows的浏览器访问,验证SpringBoot项目是否可以正常访问;
3、Docker部署War包SpringBoot程序- 定义War包程序Dockerfile文件
FROM my-tomcat-9.0.29 MAINTAINER cat ADD springboot-web-1.0.0.war /usr/local/apache-tomcat-9.0.29/webapps EXPOSE 8080 CMD /usr/local/apache-tomcat-9.0.29/bin/catalina.sh run
构建和运行War包程序的镜像
- 构建镜像:docker build -t springboot-web-war .
- 启动镜像:docker run -d -p 8080:8080 b9f7c20c50c7
- 启动查看日志:docker logs -f eb3de34a01a8(容器ID)
前面我部署一个SpringBoot的微服务程序,是采用如下步骤进行的:
1、将开发的springboot程序打成jar包或者war包;(idea里面操作的)
2、将打好的jar包或war包上传到Linux某个目录下,比如:/root/docker
3、定义Dockerfile文件,用于创建项目镜像;
4、启动创建好的项目镜像把程序运行起来;
更多的情况,我们是直接在运维环境里,上传源码,直接maven打包jar或者war,然后再进一步构建成镜像,不过这个操作过程本质上与手动打包是类似的;
1、在Linux下配置maven运行环境;
2、将项目源代码上传到Linux某个目录下;(或从git上拉取源代码)
3、通过maven命令打包:mvn clean package -Dmaven.test.skip=true
4、编辑Dockerfile文件,生成项目镜像;
5、构建项目镜像;
6、运行项目镜像,启动项目程序;
war包的Dockerfile文件:
FROM docker.io/tomcat MAINTAINER cat ADD target/springboot-web-1.0.0.war /usr/local/tomcat/webapps EXPOSE 8080 CMD /usr/local/tomcat/bin/catalina.sh run 构建镜像:docker build -t springboot-web-jar . 运行容器:docker run -d -p 8080:8080 ac84bde53485、IntelliJ IDEA下的Docker
- 1、安装idea下的docker插件
- 2、配置一下 /etc/docker/daemon.json的host ;
[root@server 35-springboot-web]# cat /etc/docker/daemon.json
{
"hosts": ["tcp://0.0.0.0:2375","unix:///var/run/docker.sock"],
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries": ["12.24.67.78:5000"]
}
- 3、idea下配置 tcp://12.24.67.78.93:2375
- 4、在项目下写一个Dockerfile文件;
FROM jdk1.8.0_11 MAINTAINER cat ADD target/springboot-web-1.0.0.jar /opt RUN chmod +x /opt/springboot-web-1.0.0.jar CMD java -jar /opt/springboot-web-1.0.0.jar
5、运行或者build该Dockerfile文件;
也可以上传镜像到远程私有仓库(如下图):
[root@rabbit128 ~]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries": ["127.0.0.1:5000"]
}
[root@rabbit128 ~]#
2、修改上面的配置后需要重启一下Docker;
3、推送一个镜像到私有仓库:
1、docker tag dcf9ec9265e0 127.0.0.1:5000/redis 2、docker push 127.0.0.1:5000/redis:latest4、然后才能从仓库拉取
推送:docker push 114.116.213.93:5000//tomcat:latest 推送:docker push 127.0.0.1:5000/tomcat:latest 拉取:docker pull 127.0.0.1:5000/redis:latest 拉取:docker pull 114.116.213.93:5000/redis:latest



