文章目录
- 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 save
和Docker 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
然后可以通过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