分享好友 最新动态首页 最新动态分类 切换频道
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

示例


最新文章
沈阳惠天热电股份有限公司 第十届董事会2024年第七次临时会议决议公告
登录新浪财经APP 搜索【信披】查看更多考评等级  证券代码:000692          证券简称:     公告编号:2024-69  沈阳惠天热电股份有限公司  第十届董事会2024年第七次临时会议决议公告  本公司及董事会全体成员保
掌握SEO精髓,五大步骤助你从入门到精通
学习SEO五大步骤详解,包括了解基础概念、选定目标关键词、优化网站结构和内容、建立外部链接以及持续监控和分析。从入门到精通,掌握这些步骤,提升网站在搜索引擎中的排名。随着互联网的快速发展,搜索引擎优化(SEO)已经成为企业提升网
百度手机端排名优化怎么做如何做好SEO百度手机端网站布局
想知道网站优化如何能提高百度首页排名吗?想知道关键词排名怎样才能快速准确的优化到首页吗?接下来我就和大家共同探讨一下这个问题,以下是我个人的拙见,仅供各位参考,希望对各位在网站优化及关键词优化时,有所帮助,如有不对,烦请指
手机怎么和平板同步
随着科技的发展,智能手机和平板电脑已成为我们日常生活中不可或缺的工具。为了提升用户体验,实现手机与平板之间的数据同步变得尤为重要。以下是几种实现手机与平板同步的方法,帮助您在不同设备间无缝切换。**1. 使用云服务**云服务是实
淘宝数据有哪些要素?作者:小果 时间:2024-12-20 阅读:250
淘宝店铺的运营涉及到了众多层面的数据,这些数据可以大致分为以下几大类别:1. 流量追踪数据:此类数据涵盖了店铺的浏览量、访客数量、转化率等关键指标。通过这些数据,我们可以更精准地分析店铺的流量来源、流量质量以及潜在的优化方向
《孙氏宗谱_共二十八卷_江苏孙氏》民国三年(1914)_二十四.pdf
江苏[孙姓] 孙氏宗谱二十八卷 — 民国三年(1914)_二十四.pdf
電商seo是指,電子商務中seo的中文意思
電商SEO是指什麼?帶你全面瞭解電商SEO的秘密!你可能會問:電商SEO和傳統SEO有什麼區別呢?其實,電商SEO更強調針對性。相比於傳統SEO,電商SEO更加注重產品頁面的優化、用戶體驗的提升以及銷售轉化率的提高。因為在電商網站中,用戶的最終目的是
谷歌排名优化推广指南:做好3个方面 排名一定好
  想要做谷歌SEO优化获得好的排名,不需要有一个完整且清晰的SEO排名优化方案!今天优易化谷歌排名优化指南将会从:谷歌排名优化架构布局、谷歌SEO站内优化、谷歌SEO站外推广等几个方面;为大家讲解如何做好谷歌SEO排名优化,给大家提供
相关文章
推荐文章
发表评论
0评