LOVEJOAN

文章 分类 评论
76 9 1453

站点介绍

人生是一场孤独的旅行,没有终点。。。

Docker基础概念

chuck 2023-03-14 337 14条评论 LinuxDocker Docker

首页 / 正文

Docker基础概念

主要对于Docker概念作一个大概介绍,后面会专门进行使用讲解。

Docker镜像(image)

镜像是docker的核心概念之一,相当于只读的iso系统镜像,包含了文件系统容器通过加载镜像生成,镜像自身是只读的容器从镜像启动时在镜像上创建一个可写层,类似于快照。

获取镜像

# 获取镜像
# 默认从docker hub仓库获取镜像
docker pull name[:tag]
# 完整命令
docker pull 注册服务器/仓库:tag
# 获取一个nginx镜像,默认不设置tag,获取latest最新的镜像
docker pull nginx
# 过程显示如下,使用默认标签lates,最后显示下载到镜像nginx:lates
# 镜像实际是分层的,
[root@localhost containers]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
a2abf6c4d29d: Pull complete 
a9edb18cadd1: Pull complete 
589b7251471a: Pull complete 
186b1aaa4aa6: Pull complete 
b4df32aa5a72: Pull complete 
a0bcbecc962e: Pull complete 
Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

查看镜像信息

# 查看下载的镜像
docker images
# 显示如下每个镜像都有仓库信息、tag标签、唯一的image id,创建日期以及对应的大小
[root@localhost containers]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
nginx        latest    605c77e624dd   11 months ago   141MB

创建镜像

  1. 基于已有镜像创建新镜像
# 步骤:基于nginx镜像创建一个容器,然后使用docker commit命令提交为一个镜像。
docker run -it --restart=always nginx /bin/bash # 创建容器
touch test.txt # 创建一个文件
exit # 退出容器
docker ps # 查看创建的容器
[root@localhost image]# docker ps
CONTAINER ID   IMAGE     COMMAND                   CREATED              STATUS        PORTS     NAMES
179e7e9efc9e   nginx     "/docker-entrypoint.…"   About a minute ago   Up 1 second   80/tcp    elated_shannon
# 使用docker commit 提交为一个新的镜像
docker commit [option] 容器 镜像[:tag]
docker commit -a "chuck" -m "test create image" -p 179e7e9efc9e nginx:test
# 运行结果,显示一串ID
[root@localhost image]# docker commit -a "chuck" -m "test create image" -p 179e7e9efc9e nginx:test
sha256:860010318005e1fd2e0446ee2be6ea401eb59dc616e188b3bcccbd496eb584a4
# 使用docker images查看,自定义的tag tes出现了,ID也是不一样的。
[root@localhost image]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
nginx        test      860010318005   48 seconds ago   141MB
nginx        latest    605c77e624dd   11 months ago    141MB
# 使用自定义的镜像创建容器检查是否有刚才创建的test.txt文件
[root@localhost image]# docker run -it --restart=always --name=nginx-test  nginx:test /bin/bash
root@17517c18e92e:/# ls
bin  boot  dev  docker-entrypoint.d  docker-entrypoint.sh  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  test.txt  tmp  usr  var
root@17517c18e92e:/#
# 结果是存在的,因此我们可以在原有镜像创建的容器上面进行修改,再重新生成镜像,因为镜像本来就是采用分层的文件系统构成的,每一次修改都是在原有的layer上面增加或修改。
  1. 使用Dockerfile创建

    # 实际情况中比较推进采用Dockerfile文件创建镜像,不过稍微有点复杂,后面专门记录下吧

删除本地镜像

# 删除本地镜像,镜像默认放在/var/lib/docker/image下面,以特定格式保存
docker rmi mysql
# 当使用镜像创建了容器后,镜像是不能删除,需求强制删除需要加上参数 -f,不建议强制删除,可能出现问题
docker rmi -f mysql

搜索镜像

# 搜索镜像,从docker hub搜索指定镜像
docker search [option] term
# 搜索nginx的镜像,一般普通用户只需要简单搜索即可
docker search nginx

Docker容器

轻量级沙箱,使用镜像来创建和启动、停止,类似于VM的虚拟机。每个容器相互隔离和独立,简易版的linux系统,包含文件系统,root权限、进程空间和网络。

基于镜像创建容器

# docker run 创建容器 格式为:docker run [option] 镜像[:tag]
# 常用选项-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开,--name 指定容器的名称,-p端口映射,-v挂载数据卷
docker run -it --restart=always nginx /bin/bash

常用选项

docker run 选项:
     --add-host list                  添加自定义主机到IP映射(主机:IP)
 -a, --attach list                    连接到stdin、stdout或stderr
     --blkio-weight uint16            块IO(相对权重),介于10到1000之间,或0到禁用(默认为0)
     --blkio-weight-device list       块IO权重(相对设备权重)(默认值[])
     --cap-add list                   添加Linux功能
     --cap-drop list                  放弃Linux功能
     --cgroup-parent string           容器的可选父cgroup
     --cidfile string                 将容器id写入文件
     --cpu-period int                 限制CPU CFS(完全公平调度程序)周期
     --cpu-quota int                  限制CPU CFS(完全公平调度程序)配额
     --cpu-rt-period int              限制CPU实时周期(微秒)
     --cpu-rt-runtime int             限制CPU实时运行时间(微秒)
 -c, --cpu-shares int                 CPU共享(相对权重)
     --cpus decimal                   CPU数量
     --cpuset-cpus string             允许执行的CPU(0-3、0、1)
     --cpuset-mems string             允许执行的微机电系统(0-3、0、1)
 -d, --detach                         在后台运行容器并打印容器ID
     --detach-keys string             重写用于分离容器的键序列
     --device list                    将主机设备添加到容器
     --device-cgroup-rule list        将规则添加到cgroup allowed devices列表
     --device-read-bps list           限制设备的读取速率(字节/秒)(默认为[])
     --device-read-iops list          限制设备的读取速率(IO/秒)(默认值[])
     --device-write-bps list          限制对设备的写入速率(字节/秒)(默认值[])
     --device-write-iops list         限制设备的写入速率(IO/秒)(默认值[])
     --disable-content-trust          跳过图像验证(默认为true)
     --dns list                       设置自定义DNS服务器
     --dns-option list                设置DNS选项
     --dns-search list                设置自定义DNS搜索域
     --domainname string              容器NIS域名
     --entrypoint string              覆盖图像的默认入口点
 -e, --env list                       设置环境变量
     --env-file list                  读取环境变量文件
     --expose list                    公开一个或一系列端口
     --gpus gpu-request               要添加到容器的GPU设备(“all”用于传递所有GPU)
     --group-add list                 添加要加入的其他组
     --health-cmd string              运行以检查运行状况的命令
     --health-interval duration       运行检查之间的时间(m s s m h)(默认为0s)
     --health-retries int             需要连续失败才能报告不正常
     --health-start-period duration   开始运行状况重试倒计时之前容器初始化的开始时间
                                      (m s s m h)(默认为0)
     --health-timeout duration        允许一个检查运行的最大时间(ms s m m h)(默认值0)
     --help                           打印使用
 -h, --hostname string                容器主机名
     --init                           在转发信号和获取进程的容器中运行init
 -i, --interactive                    即使没有连接,也保持stdin打开
     --ip string                      IPv4地址(例如172.30.100.104)
     --ip6 string                     IPv6地址(例如,2001:db8::33)
     --ipc string                     要使用的IPC模式
     --isolation string               集装箱隔离技术
     --kernel-memory bytes            内核内存限制
 -l, --label list                     在容器上设置元数据
     --label-file list                读取以行分隔的标签文件
     --link list                      将链接添加到另一个容器
     --link-local-ip list             容器IPv4/IPv6链路本地地址
     --log-driver string              容器的日志驱动程序
     --log-opt list                   日志驱动程序选项
     --mac-address string             容器MAC地址(例如92:d0:c6:0a:29:33)
 -m, --memory bytes                   记忆极限
     --memory-reservation bytes       存储器软限制
     --memory-swap bytes              交换限制等于内存加交换:'-1'以启用无限制交换
     --memory-swappiness int          调整容器内存交换(0到100)(默认-1)
     --mount mount                    将文件系统装载附加到容器
     --name string                    为容器指定名称
     --network network                将容器连接到网络
     --network-alias list             为容器添加网络范围的别名
     --no-healthcheck                 禁用任何容器指定的运行状况检查
     --oom-kill-disable               禁用OOM杀手
     --oom-score-adj int              调整主机的OOM首选项(-1000到1000)
     --pid string                     要使用的PID命名空间
     --pids-limit int                 调整容器PIDS限制(设置-1表示无限制)
     --privileged                     授予此容器扩展权限
 -p, --publish list                   将容器的端口发布到主机
 -P, --publish-all                    将所有公开的端口发布到随机端口
     --read-only                      将容器的根文件系统装载为只读
     --restart string                 重新启动策略以在容器退出时应用(默认为“否”)
     --rm                             容器退出时自动拆卸
     --runtime string                 用于此容器的运行时
     --security-opt list              安全选项
     --shm-size bytes                 /dev/shm的大小
     --sig-proxy                      代理接收到进程的信号(默认为true)
     --stop-signal string             停止容器的信号(默认为“sigterm”)
     --stop-timeout int               停止容器超时(秒)
     --storage-opt list               容器的存储驱动程序选项
     --sysctl map                     sysctl选项(默认映射[])
     --tmpfs list                     装入tmpfs目录
 -t, --tty                            分配一个伪tty
     --ulimit ulimit                  ulimit选项(默认值[])
 -u, --user string                    用户名或uid(格式:<name uid>[:<group gid>])
     --userns string                  要使用的用户命名空间
     --uts string                     要使用的uts命名空间
 -v, --volume list                    绑定装入卷
     --volume-driver string           容器的可选卷驱动程序
     --volumes-from list              从指定容器装入卷
 -w, --workdir string                 容器内的工作目录
————————————————
版权声明:本文为CSDN博主「启四」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zsyoung/article/details/102648198

容器操作

# 启动一个终止的容器
docker start 容器
# 停止正在运行的容器
docker stop 容器
# 删除容器,只能在容器停止后才能删除,否则需要加-f参数
docker rm 容器
# 重启容器
docker restart 容器

当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:

  • 检查本地是否存在指定的镜像,不存在就从公有仓库下载
  • 利用镜像创建并启动一个容器
  • 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
  • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
  • 从地址池配置一个 ip 地址给容器
  • 执行用户指定的应用程序
  • 执行完毕后容器被终止

进入容器内执行命令:

# 通过exec进入容器的虚拟tty终端,使用/bin/bash操作,只能在容器运行时进入,和linux系统差不多
docker exec -it nginx /bin/bash
# 当容器删除时数据也会删除,要保持数据持久应该使用数据卷映射宿主机目录

Docker仓库

存放镜像的地方,就是名称的仓库一样。有两个内容docker仓库和注册服务器。
按照仓库是否公开分为公开仓库(public)和私有仓库(private),最大的公开仓库是Docker官方的Docker hub。

公开仓库

如果是个人学习的公开仓库已经足够使用了,如果是正式环境或者个性化需求的可以搭建自己的私有仓库,或者在docker hub注册账号存放上传到docker hub也可以。公开仓库不需要登录就可以通过docker searchdocker pull下载镜像,只有你需要上传镜像才需要登录。

私有仓库

供自己或者组织内部使用的仓库,通过官方的docker-registry搭建。

# 拉取registry镜像
docker pull registry
# 通过registry镜像创建私有仓库,默认仓库位置:/var/lib/registry
docker run -d -p 5000:5000 -v /www/registry:/var/lib/registry --name registry --restart=always registry
# 修改/etc/docker/daedom.json文件
{
"insecure-registries":["192.168.80.3:5000"]
}
# 重启docker服务
# 使用浏览器访问服务器地址:端口/v2/_catalog
curl http://192.168.80.3:5000/v2/_catalog

# 上传镜像到私有仓库,需要先打标签,然后将标签上传
docker tag 860010318005 192.168.80.3:5000/test
# 然后再使用docker push 上传这个标签到仓库
docker push 192.168.80.3:5000/nginx-test

下载私有仓库的镜像

docker pull 192.168.80.3:5000/nginx-test

评论(14)

  1. 1 游客 2025-03-27 23:40 回复

    555*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)

  2. 1 游客 2025-03-27 23:39 回复

    555

  3. 1 游客 2025-03-27 23:38 回复

    555

  4. 1 游客 2025-03-27 23:37 回复

    555

  5. @@aGUD2 游客 2025-03-27 23:35 回复

    555

  6. 1KvJTfx5i'; waitfor delay '0:0:15' -- 游客 2025-03-27 23:34 回复

    555

  7. -1 OR 2+111-111-1=0+0+0+1 -- 游客 2025-03-27 23:33 回复

    555

  8. 1 游客 2025-03-27 23:33 回复

    555

  9. 1 游客 2025-03-27 23:32 回复

    555

  10. 1 游客 2025-03-27 23:32 回复

    555

  11. 1 游客 2025-03-27 23:32 回复

    555

  12. 1 游客 2025-03-27 23:30 回复

    555

  13. 1 游客 2025-03-27 23:29 回复

    555

  14. 1 游客 2025-03-27 23:26 回复

    555

热门文章

最新评论

  • 1

    555fulIdEqZ' OR 160=(SELECT 160 FROM PG_SLEEP(15))--

  • 1

    555-1)) OR 58=(SELECT 58 FROM PG_SLEEP(15))--

  • 1

    555-1) OR 13=(SELECT 13 FROM PG_SLEEP(15))--

  • 1

    555-1 OR 475=(SELECT 475 FROM PG_SLEEP(15))--

  • 1

    555

  • 1

    555

  • 1

    5554FobGRsu') OR 696=(SELECT 696 FROM PG_SLEEP(15))--

  • 1

    555C9F0upP1' OR 504=(SELECT 504 FROM PG_SLEEP(15))--

  • 1

    555

  • 1-1; waitfor delay '0:0:15' --

    555

日历

2025年05月

    123
45678910
11121314151617
18192021222324
25262728293031

文章目录