文章目录

  • Docker 运用实例
  • 下载运行MySQL镜像:
  • 进入容器:
  • 数据持久化
  • Docker的Tomcat容器部署web项目
  • 保存修改后的容器
  • Docker镜像保存为文件与从文件导入镜像
  • 第一种方式:私有仓库搭建
  • 第二种方式:保存镜像为文件
  • Docker自定义镜像
  • Dockerfile的基本结构
  • Dockerfile指令
  • 自定义JDK镜像
  • 自定义Tomcat镜像
  • Docker部署SpringBoot项目

Docker 运用实例

下载运行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的Tomcat容器部署web项目

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 commit 容器id  xxx(镜像名:tagxxx)
docker commit 90343fa54080 my_tomcat
docker commit 90343fa54080 my_tomcat:latest

把一个运行着的容器,由于里面改了一些东西,希望把该容器保存起来,可以使用上面这种做法,得到一个新镜像,下次用该新镜像运行;(镜像是一个模板)

Docker镜像保存为文件与从文件导入镜像

制作好镜像后,有时需要将镜像复制到另一台服务器使用,那么有两种方式:
一种是上传镜像到仓库中(本地仓库或远程公共仓库)
一种是将镜像保存为文件然后传到其他服务器上,再从文件中载入镜像;
可以使用Docker saveDocker load命令来存储和载入镜像。

第一种方式:私有仓库搭建

可配置加速器加速下载

/etc/docker/daemon.json
 {
 “registry-mirrors”: [“https://registry.docker-cn.com”]
 }

下载registry镜像:

docker pull registry
 docker pull docker.io/registry

启动镜像:

docker run -d -p 5000:5000 registry

docker把tar包恢复成镜像 docker 安装tar镜像_docker

然后可以通过restful接口查看仓库中的镜像(当前仓库是空的)

http://114.116.213.93:5000/v2/_catalog私服仓库推送镜像

docker tag [imageId] 114.116.213.93:5000/cat/redis:latest

比如:

1、docker tag 6408fdc94212 127.0.0.1:5000/cto/tomcat:latest
2、docker push 127.0.0.1:5000/cto/tomcat:latest 
[root@server docker]# docker tag 6408fdc94212 127.0.0.1:5000/cto/tomcat:latest
[root@server docker]# docker push 127.0.0.1:5000/cto/tomcat:latest 
The push refers to a repository [127.0.0.1:5000/cto/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://114.116.213.93:5000/v2/_catalog 查询刚才上传的镜像的版本
http://114.116.213.93: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自定义镜像

Dockerfile文件
Dockerfile用于构建Docker镜像,Dockerfile文件是由一行行命令语句组成,基于这些命令即可以构建一个镜像;

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 start

Dockerfile指令

FROM
格式为 FROM <image>FROM <image>:<tag> Dockerfile文件的第一条指令必须为 FROM 指令,表示从哪个基础镜像开始构建;
MAINTAINER
格式为 MAINTAINER <name>,可选的,指定维护者/作者信息;
ENV
格式为 ENV <key> <value>,指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持;
ADD
格式为ADD <src> <dest>
复制指定的宿主机上的<src>到容器中的<dest>(能够进行自动解压压缩包);
EXPOSE
格式为 EXPOSE <port> [<port>...] 告诉 Docker 服务端容器暴露的端口号,供互联系统使用,在启动容器时需要通过 -p映射端口,Docker 宿主机会自动分配一个端口转发到指定的端口;
RUN
格式为 RUN <command> RUN 指令将在当前镜像基础上执行指定命令,并提交为新的镜像,当命令较长时可以使用 \ 来换行,如果需要将两条命令或者多条命令联合起来执行需要加上&&;
如:cd /usr/local/src && wget xxxxxxx
CMD
指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令,如果指定了多条命令,只有最后一条会被执行。
如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令。
WORKDIR
用来指定当前工作目录(或者称为当前目录)
USER
运行RUN指令的用户
VOLUME
用来创建一个在image之外的mount point

自定义JDK镜像

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)

自定义Tomcat镜像

定义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

Docker部署SpringBoot项目

1、将开发的springboot程序打成jar包或者war包;
2、将打好的jar包或war包上传到Linux某个目录下,比如:/root/docker
3、定义Dockerfile文件,用于创建项目镜像;

#定义Jar包程序Dockerfile文件
FROM my_jdk1.8.0_191
MAINTAINER cto
ADD 35-springboot-web-1.0.0.jar /opt
RUN chmod +x /opt/35-springboot-web-1.0.0.jar
CMD java -jar /opt/35-springboot-web-1.0.0.jar
#构建镜像:
docker build -t 35-springboot-web-jar .
#运行容器:
docker run -d -p 8080:8080 ac84bde53958

运行Docker化的Jar包程序,通过windows的浏览器访问,验证SpringBoot项目是否可以正常访问;
Docker部署War包SpringBoot程序

定义War包程序Dockerfile文件
FROM my-tomcat-9.0.29
MAINTAINER cat
ADD 35-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 35-springboot-web-war . 
启动镜像:docker run -d -p 8080:8080 b9f7c20c50c7
启动查看日志:docker logs -f  eb3de34a01a8(容器ID)

War包程序依赖容器环境准备
与上面部署Jar程序依赖的容器环境一样;
运行Docker化的War包程序
通过windows的浏览器访问,验证SpringBoot项目是否可以正常访问;
springboot-web-1.0.0.war 解压得到 springboot-web-1.0.0