赞
踩
格式:docker search 关键字
docker search nginx
格式:docker pull 镜像:标签
#如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为 latest 标签。
docker pull nginx
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://y33hqxx2.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
镜像下载后存放在 /var/lib/docker
cat /var/lib/docker/image/overlay2/repositories.json
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest ae2feff98a0c 9 days ago 133MB
--------------------------------------------------------------------------------------------
REPOSITORY:镜像属于的仓库;
TAG:镜像的标签信息,标记同一个仓库中的不同镜像;
IMAGE ID:镜像的唯一ID 号,唯一标识一个镜像;
CREATED:镜像创建时间;
VIRTUAL SIZE:镜像大小;
--------------------------------------------------------------------------------------------
很重要,镜像排错的第一步
格式:docker inspect 镜像ID号
docker inspect 08b152afcfae
格式:docker tag 名称:[标签] 新名称:[新标签]
docker tag nginx:latest nginx:web
docker images | grep nginx
默认上传到 docker Hub 官方公共仓库,需要注册使用公共仓库的账号。
可以使用 docker login 命令来输入用户名、密码和邮箱来完成注册和登录。
在上传镜像之前,还需要先对本地镜像添加新的标签,然后再使用 docker push 命令进行上传。
docker tag nginx:latest nginx:web #添加新的标签
docker login #登录公共仓库
Username:
password:
docker push wangdahcu/nginx:web #上传镜像
先注册一个docker账号
docker注册https://hub.docker.com/choose-plan?ref=signup
格式:docker save -o /目录/文件名 存储的镜像:版本
docker save -o nginx nginx:latest #存出镜像命名为nginx存在当前目录下
ls -lh
格式:
docker load < 存出的文件
或者
docker load -i 存出的文件
或者
docker load --input nginx
docker load < nginx
格式:
docker rmi 仓库名称:标签 #当一个镜像有多个标签时,只是删除其中指定的标签
或者
docker rmi 镜像ID号 #会彻底删除该镜像(加-f强制删除)
#删除所有镜像,但该镜像创建的容器不能处于up状态
docker rmi `docker images -qa`
注意:如果该镜像已经被容器使用,正确的做法是先删除依赖该镜像的所有容器,再去删除镜像。
先通过docker-compose down 停止服务;后再次执行删除;
docker rmi nginx:web
格式:docker create [选项] 镜像
常用选项:
-i:让容器的输入保持打开
-t:让 Docker 分配一个伪终端
docker create -it nginx:latest /bin/bash
docker run -it nginx:latest /bin/bash
docker run -itd nginx:latest /bin/bash
-i:表示标准输入
-t:指定一个伪终端(环境)
-d:开启守护进程(后台运行)
#退出并停止容器
exit
#退出但不停止容器
crtl +p +q
格式:docker exec -it 容器ID/名称 /bin/bash
-i 选项表示让容器的输入保持打开;
-t 选项表示让 Docker 分配一个伪终端。
#进入正在运行的容器
docker attach 容器ID
docker ps #获取正在运行的容器ID
docker start 2592d3fad0fb #进入容器前,确保容器正在运行
docker exec -it 2592d3fad0fb /bin/bash
ls
exit #退出容器后,容器仍在运行
docker ps -a
docker run -it centos:7 bash #不加-d选项会创建容器后直接进入容器,但是退出容器,容器也会停止
#查看正在运行的容器
docker ps
#查看所有容器
docker ps -a #-a 选项可以显示所有的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8b0a7be0ff58 nginx:latest "/docker-entrypoint.…" 57 seconds ago Created inspiring_swanson
容器的ID号 加载的镜像 运行的程序 创建时间 当前的状态 端口映射 名称
#查看所有容器的ID
docker ps -aq
docker container ls
CONTAINER ID :运行中容器的唯一号码(自动生成)
NAMES :容器的名字(默认自动生成,可手工指定,不可重复)
手工指定:在开启容器时指定 docker container run -it --name="ljm" 9f266d35e02c
IMAGE :镜像的ID
STATUS :运行状态 (up为运行中,exited为关闭掉的容器。可使用 docker container ls -a 查看所有状态)
docker container ls -a
或
docker ps -a
docker container ls -a -q
或
docker ps -a -q
docker container inspect 容器名或者运行号码
docker container top 容器的ID
docker container logs [-ft] 容器的ID
-f 为持续监控,-t 为更加详细显示
格式:docker start 容器的ID/名称
docker start 8b0a7be0ff58
docker ps -a
可以直接执行 docker run 命令, 等同于先执行 docker create 命令,再执行 docker start 命令。
注意:容器是一个与其中运行的 shell 命令共存亡的终端,命令运行容器运行, 命令结束容器退出。
当利用 docker run 来创建容器时, Docker 在后台的标准运行过程是:
(1)检查本地是否存在指定的镜像。当镜像不存在时,会从公有仓库下载;
(2)利用镜像创建并启动一个容器;
(3)分配一个文件系统给容器,在只读的镜像层外面挂载一层可读写层;
(4)从宿主主机配置的网桥接口中桥接一个虚拟机接口到容器中;
(5)分配一个地址池中的 IP 地址给容器;
(6)执行用户指定的应用程序,执行完毕后容器被终止运行。
docker run centos:7 /usr/bin/bash -c ls /
docker ps -a #会发现创建了一个新容器并启动执行一条 shell 命令,之后就停止了
docker run -d centos:7 /usr/bin/bash -c "while true;do echo hello;done"
docker ps -a #可以看出容器始终处于 UP,运行状态
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2592d3fad0fb centos:7 "/usr/bin/bash -c 'w…" 2 seconds ago Up 2 seconds peaceful_chatelet
docker run -itd --name test1 centos:7 /bin/bash
格式:docker stop 容器的ID/名称
docker stop 2592d3fad0fb
docker ps -a
echo abc123 > ~/test.txt
docker cp ~/test.txt 2592d3fad0fb:/opt/
docker cp 2592d3fad0fb:/opt/test.txt ~/abc123.txt
#导出格式:docker export 容器ID/名称 > 文件名
docker export 2592d3fad0fb > centos7tar
#导入格式:cat 文件名 | docker import – 镜像名称:标签
cat centos7tar | docker import - centos7:test #导入后会生成镜像,但不会创建容器
docker run -d -p 500:80 nginx:latest
docker run -d -P 500:80 nginx:latest
#-p(小写):暴露指定端口
#-P(大写):暴露随机端口
#######
docker run -p(小写)
后面的参数有四种格式,列举如下:
docker run -p container_port #将容器的某个端口映射到宿主机的所有接口的(接口可以认为是IP地址)一个随机端口上。
docker run -p host_port:container_port #将容器的某个端口映射到宿主机的所有接口的一个具体端口上。
docker run -p host_ip:host_port:container_port #将容器的某个端口映射到宿主机的一个具体IP地址的具体端口上。
docker run -p host_ip::container_port #将容器的某个端口映射到宿主机的一个具体IP地址的一个随机端口上。
#可以通过命令docker port 容器名字或者ID查看映射后的端口信息,能够看到容器的端口与宿主机的哪一个端口建立了映射关系。
#######
docker run -P(大写)
不需要额外的参数,其作用是将容器内部暴露所有的端口分别映射到宿主机的所有接口的一个随机端口上。
--link 例: docker pull centos:7 docker run -itd -P --name web1 centos:7 /bin/bash docker run -itd -P --name web2 --link web1 centos:7 /bin/bash docker ps docker attach web1镜像id yum -y install net-tools #获取IP地址 ifconfig ctrl +p +q docker ps docker attach web2镜像id ping web1IP地址
格式:docker rm [-f] 容器ID/名称 docker stop 容器ID #删除已经终止状态的容器 docker rm 2592d3fad0fb #强制删除正在运行的容器 docker rm -f 2592d3fad0fb #删除非up状态的所有容器 docker rm $(docker ps -qa) #强制删除所有容器 docker rm -f `docker ps -qa` docker ps -a | awk 'NR>=2{print "docker stop "$1}' | bash #批量停止容器 docker ps- a | awk 'NR>=2{print $1}' | xargs docker stop docker ps -a | awk 'NR>=2{print "docker rm "$1}' | bash #批量删除所有容器 docker ps -a | awk 'NR>=2{print $1}' | xargs docker rm docker images | awk 'NR>=2{print "docker rmi "$3}' | bash #批量删除镜像 docker images | grep none | awk ' {print $3}' | xargs docker rmi #删除none镜像
例如:数据卷
docker run -it -v /root/aaa:/bbb centos:7 /bin/bash
例如:数据卷容器
docker run -it -v /aaa -v /bbb --name wdc centos:7 /bin/bash
docker run -it --volumes-from wdc --name katalina centos:7 /bin/bash
#首先下载registry 镜像 docker pull registry #在daemon.json文件中添加私有镜像仓库地址 vim /etc/docker/daemon.json { "insecure-registries": ["192.168.80.10:5000"], #添加,注意用逗号结尾 "registry-mirrors": ["https://6ijb8ube.mirror.aliyuncs.com"] } systemctl restart docker.service #运行registry 容器 docker run -itd -v /data/registry:/var/lib/registry -p 5000: 5000 --restart=always --name registry registry:latest ------------------------------------------------- -itd: 在容器中打开一个伪终端进行交互操作,并在后台运行 -v: 把宿主机的/data/registry目录绑定到容器/var/lib/registry目录(这个目录是registry容器中存放镜像文件的目录),来实现数据的持久化; -p:映射端口;访问宿主机的5000端口就访问到registry容器的服务了 --restart=always: 这是重启的策略,在容器退出时总是重启容器 --name registry: 创建容器命名为registry registry:latest:这个是刚才pull下来的镜像 --------------------------------------------------- Docker容器的重启策略如下: no:默认策略,在容器退出时不重启容器 on-failure:在容器非正常退出时(退出状态非0),才会重启容器 on-failure:3 :在容器非正常退出时重启容器,最多重启3次 always:在容器退出时总是重启容器 unless-stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器 #为镜像打标签 docker tag centos:7 192.168.80.10:5000/centos:v1 #上传到私有仓库 docker push 192.168.80.10:5000/centos:v1 #列出私有仓库的所有镜像 curl http://192.168.80.10:5000/v2/_catalog #出私有仓库的centos 镜像有哪些tag curl http://192.168.80.10:5000/v2/centos/tags/list #先删除原有的 centos 的镜像,再测试私有仓库下载 docker rmi -f 8652b9f0cb4c docker pull 192.168.80.10:5000/centos:v1
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。