t04_入门使用

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.每一个指令都会创建提交一个新的镜像层,并且提交!

image-20230720142626508

步骤:

DockerFile:构建文件,定义了一切的步骤,源代码

DockerImages:通过DockerFile构建生成的镜像,最终发布和运行的产品!

Docker容器:容器就是镜像运行起来提供服务器

DockerFile的指令

FROM			#基础镜像,一切从这里开始的
MAINTAINER		#指定维护者的信息,也就是告诉别人这个镜像是谁写的
RUN				#镜像构建的时候需要运行的命令
ADD				#COPY文件,会自动解压
WORKDIR			#镜像的工作目录(设置当前工作目录)
VOLUME			#这只卷	,挂载主机的目录
EXPOSE			#指定对外的端口
RUN				#进程要一直运行下去
CMD				#指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT		#指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD			#当构建一个被继承DockerFile这个时候就会运行ONBUILD的指令,触发指令
COPY			#类似与ADD,将我们文件拷贝到镜像中
ENV				#构建的时候设置环境变量!

image-20230720175813356

构建自己的centos

[root@iZp5qw8rqo26yzZ dockerfile]# vim mydockerfile-centos 
[root@iZp5qw8rqo26yzZ dockerfile]# cat mydockerfile-centos 
FROM centos:7                                                                                                                                                                                                    
MAINTAINER XCCVT<12345@qq.com>

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

image-20230721093754533

2.编写dockerfile文件,官方命名DockerFile,build会自动寻找这个文件,就不需要-f指定了

dockerfile文件
[root@iZp5qw8rqo26yzZ tomcat]# cat DockerFile 
FROM centos:7
MAINTAINER xccvt<123456@qq.com>

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

posted @   六个小豹  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
点击右上角即可分享
微信分享提示