commit
#配置属于自己的镜像
[root@iZp5qw8rqo26yzZ ~]# docker run -it -p 39100:8080 tomcat
#交互式运行tomcat,配置外网端口为39100
#进入tomcat的docker容器
[root@iZp5qw8rqo26yzZ ~]# docker exec -it 527350722fee /bin/bash
#进入到容器后复制,(开始情况下webapps中是没有任何文件的)
root@527350722fee:/usr/local/tomcat# cp -r webapps.dist/* webapps
#退出到本机服务器控制台下
#使用commit创建镜像
[root@iZp5qw8rqo26yzZ ~]# docker commit -a="xccvt" -m="add webapps app" 527350722fee xccvttomcat:1.0
sha256:6d5783d2279e4f9e1609cafdcd43585dfe069c024e6041791e419f0010f21b97
[root@iZp5qw8rqo26yzZ ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
xccvttomcat 1.0 6d5783d2279e 24 seconds ago 684MB可以发现我们创建的镜像出现了
hello-world latest 9c7a54a9a43c 2 months ago 13.3kB
nginx latest 605c77e624dd 18 months ago 141MB
tomcat latest fb5657adc892 19 months ago 680MB
redis latest 7614ae9453d1 19 months ago 113MB
mysql 5.7 c20987f18b13 19 months ago 448MB
mysql latest 3218b38490ce 19 months ago 516MB
centos latest 5d0da3dc9764 22 months ago 231MB
portainer/portainer latest 580c0e4e98b0 2 years ago 79.1MB
elasticsearch 7.6.2 f29a1ee41030 3 years ago 791MB
容器数据卷
容器之间可以有一个数据共享的技术,将Docker容器中产生的数据,同步到本地!
相当于数据双向绑定,在容器中的共享文件夹,在主机中可以直接看到
1使用命令来挂载 -v
[root@iZp5qw8rqo26yzZ ~]# docker run -it -v /home/ceshi:/home centos /bin/bash
运行一个centos主机,并且将容器的/home目录挂载到本主机的home/ceshi目录上,两边同步显示
两边有一边添加则同时添加,一边修改或删除则同时修改或者删除
安装MySQL
思考:MySQL的数据持久化问题
官网MySQL容器
$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
安装MySQL挂载MySQL到我们的Linux服务器中
[root@iZp5qw8rqo26yzZ ~]# docker run -d -p 39101:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --name mysql01 mysql:5.7
-d:表示后台运行
-p:端口映射
-v:卷挂载
-e:环境配置
--name:容器名字
本地使用navicat连结测试
在本地创建数据库,查看服务器是否有文件
删除容器后查看数据是否还在,
[root@iZp5qw8rqo26yzZ test]# docker rm -f 5400cdf83a45
5400cdf83a45
[root@iZp5qw8rqo26yzZ test]# ls
a.frm a.ibd db.opt
[root@iZp5qw8rqo26yzZ test]# cd ..
[root@iZp5qw8rqo26yzZ data]# ls
auto.cnf ca.pem client-key.pem ibdata1 ib_logfile1 mysql private_key.pem server-cert.pem sys
ca-key.pem client-cert.pem ib_buffer_pool ib_logfile0 ibtmp1 performance_schema public_key.pem server-key.pem test
[root@iZp5qw8rqo26yzZ data]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
527350722fee tomcat "catalina.sh run" 5 hours ago Up 5 hours 0.0.0.0:39100->8080/tcp loving_elgamal
c1956c2f8ed3 portainer/portainer "/portainer" 6 hours ago Up 6 hours 0.0.0.0:8088->9000/tcp funny_goldberg
[root@iZp5qw8rqo26yzZ data]#
具名挂载和匿名挂载
#匿名挂载
不指定主机名,只指定容器内的,没有指定容器外的
[root@iZp5qw8rqo26yzZ ceshi]# docker run -d --name nginx01 -v /etc/nginx nginx
查看所有volume卷的情况
[root@iZp5qw8rqo26yzZ ceshi]# docker volume ls
[root@iZp5qw8rqo26yzZ etc]# docker run -d -P --name nginx02 -v junming-nginx:/etc/nginx nginx
#具名挂载
[root@iZp5qw8rqo26yzZ etc]# docker run -d -P --name nginx02 -v junming-nginx:/etc/nginx nginx
51b4c090201faf181f1aa5ac9313e2a1ddf81a4eabcf83a8271bed3381c7a544
[root@iZp5qw8rqo26yzZ etc]# docker volume
Usage: docker volume COMMAND
Manage volumes
Commands:
create Create a volume
inspect Display detailed information on one or more volumes
ls List volumes
prune Remove all unused local volumes
rm Remove one or more volumes
Run 'docker volume COMMAND --help' for more information on a command.
[root@iZp5qw8rqo26yzZ etc]# docker volume ls
DRIVER VOLUME NAME
local 9434ab72a78d2aa1e6c24cb516c52932fe4b28411a72ce2a8bbb19d6ad7c42c4
local e656a4bad784903648fee55e6f37b5c3d3a3660727d11c96e9280f64d6a2e939
local f8381450d5c5401e191536d82f6196628f648c78c8e366ee436bc80f02f2e55c
local junming-nginx
[root@iZp5qw8rqo26yzZ etc]#
#通过-v 卷名:容器内路径
#查看一下这个卷
[root@iZp5qw8rqo26yzZ etc]# docker volume inspect junming-nginx
[
{
"CreatedAt": "2023-07-19T17:45:51+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/junming-nginx/_data",
"Name": "junming-nginx",
"Options": null,
"Scope": "local"
}
]
所有docker 容器内的卷,没有指定的情况下都是在:/var/lib/docker/volumes/*/_data
通过具名挂载可以方便的找到我们的一个卷,大多数情况在使用的是:具名挂载
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径::容器内路径 #指定路径挂载!
拓展
通过-v容器内路径,ro rw改变读写权限
ro readonly #只读
rw readwrite #可读可写
[root@iZp5qw8rqo26yzZ _data]# docker run -d -P --name nginx02 -v junming-nginx:/etc/nginx:ro nginx
[root@iZp5qw8rqo26yzZ _data]# docker run -d -P --name nginx02 -v junming-nginx:/etc/nginx:rw nginx
#ro 只要看到ro就说明这个路径只能通过宿主机来操作,容器内部是无法操作!
初始DockerFile
DockerFile就是用来构建dockers镜像的构建文件!命令脚本!先体验一下!
#创建一个dockerfile文件,名字可以随机,建议 Dockerfile
#文件中的内容 指令(大写) 参数
1 FROM centos
2
3 VOLUME ["volume01","volueme02"]
4
5 CMD echo ".......end........"
6 CMD /bin/bash
这里的每个命令就是镜像的一层
[root@iZp5qw8rqo26yzZ docker-test-volume]# docker build -f /home/docker-test-volume/dockerfile1 -t xccvt/centos .
数据卷容器
多个mysql同步数据
容器之间同步数据
使用三个容器测试
创建容器docker01
[root@iZp5qw8rqo26yzZ ~]# docker run -it --name docker01 xccvt/centos:1.0
创建容器docker02 挂载docker01
[root@iZp5qw8rqo26yzZ ~]# docker run -it --name docker02 --volumes-from docker01 xccvt/centos
创建容器docker02 挂载docker02
[root@iZp5qw8rqo26yzZ /]# docker run -it --name docker03 --volumes-from docker02 xccvt/centos
当容器与另一个容器挂载后就会同步所有挂载过的容器,卷重
DockerFile
DockerFile用来构建docker镜像的文件!命令参数脚本!
构建步骤:
1.编写一个dockerfile文件
2.docker bulid构建成为一个镜像
3.docker run 运行镜像
4.docker push 运行镜像(DockerHub、阿里云镜像仓库!)
DockerFile构建过程
基础知识了解:
1.每个保留关键字(指令)都必须是大写字母
2.执行从上到下顺序执行
3.#表示注释
4.每一个指令都会创建提交一个新的镜像层,并且提交!
步骤:
DockerFile:构建文件,定义了一切的步骤,源代码
DockerImages:通过DockerFile构建生成的镜像,最终发布和运行的产品!
Docker容器:容器就是镜像运行起来提供服务器
DockerFile的指令
FROM #基础镜像,一切从这里开始的
MAINTAINER #指定维护者的信息,也就是告诉别人这个镜像是谁写的
RUN #镜像构建的时候需要运行的命令
ADD #COPY文件,会自动解压
WORKDIR #镜像的工作目录(设置当前工作目录)
VOLUME #这只卷 ,挂载主机的目录
EXPOSE #指定对外的端口
RUN #进程要一直运行下去
CMD #指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD #当构建一个被继承DockerFile这个时候就会运行ONBUILD的指令,触发指令
COPY #类似与ADD,将我们文件拷贝到镜像中
ENV #构建的时候设置环境变量!
构建自己的centos
[root@iZp5qw8rqo26yzZ dockerfile]# vim mydockerfile-centos
[root@iZp5qw8rqo26yzZ dockerfile]# cat mydockerfile-centos
FROM centos:7
MAINTAINER XCCVT<[email protected]>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo @MYPATH
CMD echo "-------end-------"
CMD /bin/bash
创建镜像
[root@iZp5qw8rqo26yzZ dockerfile]# docker build -f mydockerfile-centos -t mycentos:0.1 .
DockerFile制作Tomcat镜像那个
1准备好Tomcat和jdk的安装包
[root@iZp5qw8rqo26yzZ tomcat]# ls
apache-tomcat-9.0.78-deployer.tar.gz jdk-8u341-linux-x64.tar.gz
2.编写dockerfile文件,官方命名DockerFile,build会自动寻找这个文件,就不需要-f指定了
dockerfile文件
[root@iZp5qw8rqo26yzZ tomcat]# cat DockerFile
FROM centos:7
MAINTAINER xccvt<[email protected]>
COPY readme.txt /usr/local/readme.txt
ADD jdk-8u341-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.78.tar.gz /usr/local/
RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_341
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.78
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.78
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.78/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.78/bin/logs/catalina.out
生成镜像
[root@iZp5qw8rqo26yzZ tomcat]# docker build -f DockerFile -t diytomcat .
创建容器
[root@iZp5qw8rqo26yzZ tomcat]# docker run -d -p 39001:8080 --name xccvttomcat -v /home/xccvt/build/tomcat/test:/usr/local/apache-tomcat-9.0.78/webapps/test -v /home/xccvt/build/tomcat/tomcatlogs:/usr/local/apache-tomcat-9.0.78/logs diytomcat
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
</web-app>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
</web-app>
[root@iZp5qw8rqo26yzZ test]# cat index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title></title>
</head>
<body>
<h1>123442141412</h1>
<%out.println("----my test web logs----"); %>
</body>
</html>
Docker 网络
理解docker0
ip addr无效可以在容器中执行以下命令
apt update&& apt install -y iproute2 && apt install -y iputils-ping
[root@iZp5qw8rqo26yzZ test]# docker exec -it 685e859af042 ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
141: eth0@if142: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
[root@iZp5qw8rqo26yzZ test]# ping 172.17.0.2
PING 172.17.0.2 (172.17.0.2) 56(84) bytes of data.
64 bytes from 172.17.0.2: icmp_seq=1 ttl=64 time=0.055 ms
64 bytes from 172.17.0.2: icmp_seq=2 ttl=64 time=0.104 ms
tomcat03与tomcat02联通
[root@iZp5qw8rqo26yzZ test]# docker run -d -P --name tomcat03 --link tomcat02 tomcat
命令 | 作用 |
---|---|
docker commit -a="xccvt" -m="add webapps app" 527350722fee xccvttomcat:1.0 | 创建镜像 |
docker run -it -v /home/ceshi:/home centos /bin/bash | 运行一个centos主机,并且将容器的/home目录挂载到本主机的home/ceshi目录上,两边同步显示 |
docker volume ls | 查看所有卷的情况 |
docker inspect 2f7b91b0697f | 查看容器2f7b91b0697f的信息 |
docker build -f dockerfile 文件路径 -t 镜像名:[tag] | dockerfile使用 build创建镜像 |
ip addr | 获取当前ip地址 |
docker network ls | 查看所有网络 |
企业实战
Docker Compose
Docker Swarm
CI/CD
标签:iZp5qw8rqo26yzZ,容器,入门,tomcat,local,t04,使用,docker,root From: https://www.cnblogs.com/2580p/p/18066934