上一篇 【Docker】一、云时代容器Docker的基本操作
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 -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
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 save和Docker load命令来存储和载入镜像。
/etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
docker pull registry
docker pull docker.io/registry
这两个一样
docker run -d -p 5000:5000 registry
在这里插入代码片
http://127.0.0.1:5000/v2/_catalog
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]#
启动容器的时候,也可以通过 --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命令查看;
Dockerfile用于构建Docker镜像,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
EXPOSE [...]
cd /usr/local/src && wget xxxxxxx;
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)
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
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
运行MySQL容器:docker run -p 3306:3306 -e MYSQL_DATABASE=workdb -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
运行Docker化的Jar包程序,通过windows的浏览器访问,验证SpringBoot项目是否可以正常访问;
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 ac84bde5348
[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"]
}
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 ~]#
1、docker tag dcf9ec9265e0 127.0.0.1:5000/redis
2、docker push 127.0.0.1:5000/redis:latest
推送: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