Docker容器技术
Docker基础概念
Docker安装配置
通过docker registry搭建私有仓库
Dockerfile编写学习
数据卷管理
Docker 镜像
Docker容器管理
daemon.json配置示例
Dcocker网络互联
Docker部署nextcloud网盘
Watchtower-容器的自动升级
想要轻松上手Docker?Portainer帮你实现零基础快速部署!
Nextcloud搭建
Docker搭建Mrdoc
Mrdoc迁移记录
Docker部署wordpress博客
Docker部署个人密码管理平台bitwarden
Docker-compose安装配置
Docker-compose搭建小说阅读器
Docker搭建青龙面板
Docker搭建自己的导航页dashy
uptime-kuma监控面板部署
容器搭建Nas-tool及相关套件
本文档使用 MrDoc 发布
-
+
首页
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上面增加或修改。 ``` 2. 使用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 search`和`docker 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 ``` 关系图大概是这样吧。 
Chuck
2022年12月20日 15:57
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码