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
创建镜像
- 基于已有镜像创建新镜像
# 步骤:基于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上面增加或修改。
使用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
1 游客 2025-03-27 23:40 回复
555*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)
1 游客 2025-03-27 23:39 回复
555
1 游客 2025-03-27 23:38 回复
555
1 游客 2025-03-27 23:37 回复
555
@@aGUD2 游客 2025-03-27 23:35 回复
555
1KvJTfx5i'; waitfor delay '0:0:15' -- 游客 2025-03-27 23:34 回复
555
-1 OR 2+111-111-1=0+0+0+1 -- 游客 2025-03-27 23:33 回复
555
1 游客 2025-03-27 23:33 回复
555
1 游客 2025-03-27 23:32 回复
555
1 游客 2025-03-27 23:32 回复
555
1 游客 2025-03-27 23:32 回复
555
1 游客 2025-03-27 23:30 回复
555
1 游客 2025-03-27 23:29 回复
555
1 游客 2025-03-27 23:26 回复
555