分享好友 最新动态首页 最新动态分类 切换频道
docker从入门到如土,docker笔记(一篇全)
2024-12-27 03:17

Docker 镜像都是只读,当容器启动时,一个新的可写层被加到镜像的顶部。

docker从入门到如土,docker笔记(一篇全)

这一层就是我们通常说的容器层,容器层之下的都叫镜像层

联合文件系统(UnionFS)是 Docker 的核心,也是 Docker 得以极致精简的保证。分层下载

分层镜像的好处,与之前的版本共用一部分,不用再重复下载

基础命令

docker version #查看docker的版本信息

docker info #查看docker的系统信息,包括镜像和容器的数量

docker 命令 --help #帮助命令(可查看可选的参数)

docker COMMAND --help

镜像命令

docker images 查看本地主机的所有镜像

docker search 搜索镜像

docker pull 镜像名[:tag] 下载镜像 指定版本下载

docker rmi 删除镜像

容器命令

docker run [可选参数] image

#参数说明
–name=“名字” 指定容器名字
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口
(
-p ip:主机端口:容器端口 配置主机端口映射到容器端口
-p 主机端口:容器端口
-p 容器端口
)
-P 随机指定端口(大写的P)

exit 停止并退出容器(后台方式运行则仅退出

Ctrl+P+Q 不停止容器退出

docker ps 列出运行过的容器命令

# 列出当前正在运行的容器 -a

# 列出所有容器的运行记录 -n=?

# 显示最近创建的n个容器 -q

# 只显示容器的编号

docker rm 容器id #删除指定的容器,不能删除正在运行的容器,强制删除使用 rm -f
docker rm -f $(docker ps -aq) #删除所有的容器
docker ps -a -q|xargs docker rm #删除所有的容器

 
日志的查看

docker logs --help

查看容器中进程信息

docker top

查看容器的元数据

docker inspect 容器id

进入当前正在运行的容器

docker exec -it c703b5b1911f /bin/bash

docker attach c703b5b1911f

拷贝操作
 
 

docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

提交镜像

使用docker commit 命令提交容器成为一个新的版本

docker commit -m=“提交的描述信息” -a=“作者” 容器id 目标镜像名:[TAG]

先下载镜像 docker pull mysql-server、zabbix-java-gateway、zabbix-server-mysql、zabbix-web-nginx-mysql

启动MySQL实例

docker run --name mysql-server -t
-e MYSQL_DATABASE=“zabbixdb”
-e MYSQL_USER=“zabbix”
-e MYSQL_PASSWORD=“zabbix_paw”
-e MYSQL_ROOT_PASSWORD=“root_user”
-p 3307:3306
-d mysql:8.0
–character-set-server=utf8 --collation-server=utf8_bin
–default-authentication-plugin=mysql_native_password

启动Zabbix Java gateway实例

docker run --name zabbix-java-gateways -t
-d zabbix/zabbix-java-gateway

启动Zabbix server实例

docker run --name zabbix-server-mysqls -t
-e DB_SERVER_HOST=“36.139.53.254”
-e DB_SERVER_PORT=“3307”
-e MYSQL_DATABASE=“zabbixdb”
-e MYSQL_USER=“zabbix”
-e MYSQL_PASSWORD=“zabbix_paw”
-e MYSQL_ROOT_PASSWORD=“root_user”
-e ZBX_JAVAGATEWAY=“zabbix-java-gateways”
-p 10051:10051
-d zabbix/zabbix-server-mysql

启动Zabbix Web界面

docker run --name zabbix-web-nginx-mysqls -t
-e ZBX_SERVER_HOST=“36.139.53.254”
-e DB_SERVER_HOST=“36.139.53.254”
-e DB_SERVER_PORT=“3307”
-e MYSQL_DATABASE=“zabbixdb”
-e MYSQL_USER=“zabbix”
-e MYSQL_PASSWORD=“zabbix_paw”
-e MYSQL_ROOT_PASSWORD=“root_user”
-p 80:8080
-d zabbix/zabbix-web-nginx-mysql

地址: ip:80

默认的用户名 Admin 以及密码 zabbix,即可登录

Nginx部署

(1)搜索并下载镜像

docker search nginx

docker pull nginx

docker images

docker run -d --name nginx01 -p 3334:80 nginx

 
 
  • bootfs(boot file system:启动文件系统。
  • rootfs:root file system:基础文件系统。

docker commit [参数] 容器 [仓库[:标签]]

docker commit -m=“提交的描述信息” -a=“作者” 容器id 目标镜像名:[tag]

  • :作者信息。一般为 作者名字<邮箱>
  • :将 Dockerfile 指令应用于创建的映像。
  • :注释信息。
  • :提交期间暂停容器(默认)。
下载Tomcat镜像到本地

docker pull tomcat:9.0

docker images

启动容器

docker run -it --name tomcat123 -p 8888:8080 tomcat:9.0

docker exec -it tomcat123 /bin/bash

对Tomcat镜像进行修改

cp -r webapps.dist/* webapps

ls -l webapps

提交镜像

# 退出Tomcat容器

exit

# 执行docker commit 提交生成新的tomcat镜像

 

docker commit -m=“add webapps App” -a=“sunwukong” d60ed0bff852 tomcat123:1.0

启动自定义的Tomcat镜像

docker run -it -p 8888:8080 tomcat123:1.0

目录的挂载,将我们容器内的目录,同步到linux上面,容器间也是可以数据共享的

方式一:直接使用命令来挂载 -v

 

以交互模式启动 centos 镜像

docker run -it -v /home/ceshi:/home centos /bin/bash

Mounts 下的 Source 即为设置的主机目录、Destination 即为设置的容器目录

 

数据卷技术实现的是双向同步

  • (readonly):只读。
  • (readwrite):可读可写。
实战
 

具名和匿名挂载

具名挂载

由于指定了卷名,所以这种方式称为具名挂载由于指定了卷名,所以这种方式称为具名挂载

启动镜像时只定义主机卷名称,不指定挂载目录。

docker run -it -v my-centos:/home centos /bin/bash

查看目前挂载的卷

docker volume ls

查看卷的详情

[root@sail mysql]# docker volume inspect my-centos
[
{
“CreatedAt”: “2021-12-20T16:55:35+08:00”,
“Driver”: “local”,
“Labels”: null,
“Mountpoint”: “/var/lib/docker/volumes/my-centos/_data”,
“Name”: “my-centos”,
“Options”: null,
“Scope”: “local”
}
]

卷挂载在 目录下

匿名挂载

启动镜像时只指定容器目录

docker run -it -v /home centos /bin/bash

查看目前挂载的卷

docker volume ls

查看卷的详情

docker volume inspect

  • 每个指令都必须是大写字母。
  • 按照从上到下顺序执行。
  • # 表示注释。
  • 每一条指令都会创建一个新的镜像层。
 
 

docker build

Dockerfile 编写好后,需要使用 命令运行

docker build -f 路径 -t name:tag

  • :指定要使用的Dockerfile路径。
  • :镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
  • :设置内存最大值。

docker history查看构建记录

编写 Dockerfile

 

构建镜像

 

查看构建的镜像

 

查看本地镜像的构建记录

 

运行测试

 
 

编写 Dockerfile

 

其中的 readme.txt 一般作为镜像说明文件,可以在里面编写镜像的信息。

构建镜像

 

启动镜像

 

启动时将 tomcat 的 webappslogs 目录都挂载到了本机

查看挂载目录

[root@sail tomcat]# ls /home/sail/tomcat
logs webapps

进入容器

 
 
 

jdk 和 readme.txt 都是具备了的,且 tomcat 目录下的文件也是完整的

查看挂载文件

这里以 logs 为例,我们先进入 tomcat 容器中的 logs 文件夹查看日志内容

 

然后再退出查看主机上挂载的 logs 文件夹

 

两个地方 logs 下的文件内容一致,说明挂载成功

注册账号

登录 Docker Hub 账号

 

发布镜像

docker push

 
 

docker tag

必须以 的格式命令才能提交

 

此时会多出一个相同 ID 但是标签和名字不同的镜像

再次发布镜像

 

这样就能发布成功了。且可以发现镜像的发布也是分层发布的

由于对国外网络的限制,发布镜像到 DockerHub 是比较缓慢的。

这里可以使用配置 Docker 国内镜像站的方式实现加速。

运行以下命令即可

 
 

该脚本可以将 加入到 Docker 配置文件 中

适用于 Ubuntu14.04DebianCentOS6CentOS7FedoraArch LinuxopenSUSE Leap 42.1,其他版本可能有细微不同

去 Docker Hub 上以 账号名/镜像名 搜索我们刚发布的镜像,发现是可以搜索到的

登录阿里云,点击我的阿里云

创建实例

进入镜像仓库

创建好个人实例后,点击进入。

创建命名空间

一个账号只能创建 3 个命名空间,需要谨慎创建。

创建镜像仓库

点击下一步,创建本地仓库

退出登录的账号

 

登录阿里云账号

 
 

有三个网卡信息

  • lo:本地。
  • ens:虚拟机或阿里云服务器地址。
  • docker0:Docker 网络地址。

在 Docker 安装后,主机会为 Docker 分配一个网卡,名为 docker0

该网卡使用桥接模式,使用的是 veth-pair 技术

启动两个容器

查看 Linux 网络

 

Docker 每启动一个容器,就会分配一个 IP

查看容器的内部网络

 

可以看到容器内 IP 与本机 IP 成对出现,这就是 veth-pair 技术

容器访问 docker0 测试

 

容器与 docker0 之间是可以访问的

容器与容器之间访问

Docker 中的所有网络接口都是虚拟的,相当于内网传递。

只要删除容器,对应网络就会删除。

docker run —link

每次重启容器或 Linux,IP 就会变化,固定 IP 互联网络就会失效。

如果能使用服务名来连接,而不考虑 IP,就会方便很多。

测试使用容器名来 ping

 

容器之间无法通过容器名来连接

先启动 tomcat01

 

使用 命令启动 tomcat02

 

在 tomcat02 访问 tomcat01

 

在 tomcat01 访问 tomcat02 则无法访问

tomcat02 能够通过容器名访问 tomcat01,原理是 通过 tomcat02 在自己容器 hosts 文件中配置了 tomcat01 IP 信息

 
这种方式已经不流行了,建议使用自定义网络实现。

docker network ls

 
  • bridge:桥接模式(默认)。自己创建也使用这种模式。
  • host:和宿主即共享。
  • none:不配置网络。

启动容器

 

在我们启动容器的时候默认会有一个网络设置

自定义网络,先使用 命令查询一下

 

docker network create

参数

  • :网络模式
  • :子网
  • :网关

创建自定义网络

 

查看创建的网络

 
 

以下配置可以看出,自定义网络创建完成

 

启动镜像

 

连接测试

 

这种方式可以实现不同集群使用不同的网络,保证集群网络的安全。

如 Redis 集群在 192.160.0.0/16 网段下,MySQL 集群在 192.161.0.0/16 网段下

docker network connect

使用实现一个容器链接到另一个网段。

建立连接

 
 
 
 

查看容器详情

 
 

这里也可以发现容器 tomcat02-net 已经与 mynet 建立了连接

测试连接

 

网络连通成功

使用 Docker 的时候,定义 Dockerfile 文件,然后使用 、 等命令操作容器。

然而微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,这样效率很低,也不方便管理。

使用 Docker Compose 可以轻松、高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具。

yaml 官方示例

https://docs.docker.com/compose/compose-file/compose-file-v3/#compose-file-structure-and-examples

 

depends_on:依赖关系,如 web 依赖 redis 和 db,通过 depends_on 表明关系。

 
 

Docker Compose 是 Docker 的一个开源项目,目前托管到了 GitHub,需要前往 GitHub 下载。

 
 

由于存放在 GitHub,国内网络限制导致不太稳定,不推荐使用。

推荐使用 道客 提供的 Docker 极速下载 进行安装。

 
 

安装

 
 

授权

 
 

docker-compose version

 
 
 

由于 Linux 一切皆文件,删除此文件夹即可完成 Docker Compose 的卸载。

创建项目目录

 

创建 app.py

 
 

redis 是应用容器中 redis 容器的主机名,在同一网络下可以通过服务名访问,端口默认 6379。

创建 requirements.txt

 

创建 Dockerfile

 
 

创建 docker-compose.yml

 
 
 

docker-compose up

运行应用

 

第一次启动需要安装很多环境,比较缓慢。

 

查看镜像

 

启动 Docker Compose 时,会自动拉取需要的镜像。

查看容器

 

可以看到容器命名都带有数字,是因为需要集群管理,数字代表副本序号。

查看网络

 

项目中的内容都在同个网络下。

访问测试

 

Docker Compose 启动完成。

docker-compose stop

示例

 
 

docker-compose down

示例


最新文章
济南SEO负面优化揭秘,揭秘网站排名的致命危机
济南SEO负面优化,是一种性极强的不正当手段,它通过损害网站声誉和结构,严重影响网站排名。这种非法操作不仅损害了网站本身的利益,还了互联网生态平衡,必须予以严厉打击。随着互联网的快速发展,搜索引擎优化(SEO)已成为企业提升网站
阿尔法·罗密欧Giulia朱丽叶该怎么选 能跑能装
对于实用主义者而言,汽车油耗低是一件好事,毕竟油费可是日常用车成本里的大头。不少网友留言想看 ,今天它来了。让我们一起来看看它的表现吧。首先从外观来看,Giulia朱丽叶车头设计显得十分凶悍 ,看上去非常犀利。前车灯非常符合消费者
建站资源策划:强化数据安全与隐私保护策略
  在建站资源策划中,数据安全与隐私保护无疑是至关重要的考虑因素。随着互联网的飞速发展,网络安全问题日益凸显,数据泄露、黑客攻击等事件时有发生,给企业和用户带来了巨大的损失。因此,在建站资源策划阶段,就必须充分考虑到数据安
类似捉宠物的手机游戏推荐 类似捉宠物的手机游戏推荐女生
本文目录有什么带宠物的手机游戏。有没有类似于QQ宠物那样的小游戏求能让宠物合体的好玩的手机游戏,多来几个,谢谢大家了1、1,类似于手机宠物的游戏有很多的。例如:宠物妖怪、宠物城堡、宠物联盟等等2、2,可以到电脑管家官网下载一个电脑
酒店预订小程序开发:打造高效便捷的在线预订平台
一、引言随着移动互联网的迅猛发展,小程序作为一种轻量级的应用形式,已经广泛应用于各行各业。酒店行业也不例外,越来越多的酒店开始开发自己的预订小程序,以提供更加便捷、高效的在线预订服务。本文将详细介绍酒店预订小程序的开发过程
vivo不讲武德,512GB+6000mAh+5000万双摄,如今低至1931元起
大家有没有发现今年下半年上市的主流国产高端机基本都涨价了?哪怕就是主打性价比的骁龙8至尊版手机起售价都已经来到了3699元,1999元买高通顶尖芯片的时代早已一去不复返了。如果你想要行业顶尖的性能,并且对拍照和质感等方面都有较高的
预测退休养老金最好的软件
内容摘要:关于退休养老金预测软件及查社保养老金下载哪个软件等热门问题,本文认为3进行计算和预测:软件会根据用户提供的信息结合相关政策和计算方法进行退休养老金的预测计算;其次,4查看结果和分析:软件会给出用户退休后的养老金收入
黔南通风气楼网上销售保障/按人气排行榜单
黔南通风气楼网上销售保障/按人气排行榜单在数字化时代,黔南通风气楼的网络销售已成为一种趋势。为确保消费者在线购买通风气楼时的权益,销售保障措施显得尤为重要。在产品选择上,销售平台应提供详尽的通风气楼信息,包括材质、性能、安
揭秘站长SEO工具,助力网站优化,高效提升搜索引擎排名
深度解析站长SEO工具,全方位助力网站优化,提高搜索引擎排名。本文详细介绍了站长SEO工具的功能、使用方法和技巧,帮助站长优化网站,实现流量增长和品牌提升。随着互联网的飞速发展,网站数量呈式增长,如何在众多网站中脱颖而出,成为广
相关文章
推荐文章
发表评论
0评