不灭的焱

革命尚未成功,同志仍须努力下载JDK17

作者:Albert.Wen  添加时间:2024-01-07 20:20:29  修改时间:2024-07-08 15:49:40  分类:Docker/K8s  编辑
  1. 手把手带你 Docker 从入门到实践
  2. Docker从入门到实践
  3. Docker 进入容器,并在容器内执行命令

一、Docker【镜像】常见命令

# 去下载镜像,先从本地找,没有去镜像,最后没有去 hub,标签不写默认为 lastest
$ docker pull [镜像名]:[标签Tag]

# 列出本机的所有 image 文件,-a 显示本地所有镜像(包括中间镜像),-q 只显示镜像ID,--digests 显示镜像的摘要信息
$ docker image ls
$ docker images

# 删除 image 文件, -f 强制删除镜像
$ docker rmi [镜像名][:标签Tag]
$ docker rmi [镜像名1][:标签Tag] [镜像名2][:标签Tag]    # 删多个
$ docker rmi $(docker ps -a -q)    # 删全部,后面是子命令

# 查询镜像名称,--no-trunc 显示完整的镜像描述,--filter=stars=30 列出star不少于指定值的镜像,--filter=is-automated=true 列出自动构建类型的镜像
$ docker search [关键字]

# 下载镜像,标签 tag 不写默认为 lastest,也可以自己加比如 :3.2.0
$ docker pull [镜像名][:标签Tag]

# docker 构建镜像
$ docker build . --file Dockerfile --tag mrgaogang/iot-web:latest

# docker 发布
$ docker push mrgaogang/iot-web:latest

二、Docker【容器】常见命令

# 列出本机正在运行的容器,-a 列出本机所有容器包括终止运行的容器,-q 静默模式只显示容器编号,-l 显示最近创建的容器
$ docker container ls     # 等价于下面这个命令
$ docker ps
# 列出所有的容器(含停止的)
$ docker ps -a

# 新建并启动容器
$ docker run [option] [容器名] 
## --restart=always  # 启动加上这个会保证docker启动自动启动容器【注意需要放在容器名称前端】


# 启动容器
$ docker start [容器ID]/[容器Names]

# 重启容器
$ docker restart [容器ID]/[容器Names]

# 终止容器运行
$ docker kill [容器ID]  # 强行终止,相当于向容器里面的主进程发出 SIGKILL 信号,那些正在进行中的操作会全部丢失
$ docker kill $(docker ps -a -q) # 强行终止所有容器
$ docker stop [容器ID]  # 从容终止,相当于向容器里面的主进程发出 SIGTERM 信号,然后过一段时间再发出 SIGKILL 信号
$ docker stop $(docker ps -a -q) # 终止所有容器

# 终止运行的容器文件,依然会占据硬盘空间,可以使用 docker container rm 命令删除,-f 强制删除可以删除正在运行的容器
$ docker rm [容器ID]
$ docker rm `docker ps -aq`    # 删除所有已经停止的容器,因为没停止的rm删不了需要加-f

# 查看容器的输出,-t加入时间戳,-f跟随最新日志打印,--tail数字显示最后多少条,如果docker run时,没有使用-it,就要用这个命令查看输出
$ docker logs [容器ID]

# 查看容器进程信息
$ docker top [容器ID]/[容器Names]
$ docker port [容器ID]/[容器Names]

# 退出容器
$ exit           # 容器退出
ctrl + p + q     # 容器退出,快捷键

# 进入容器
$ 【不要用此命令】docker attach [容器ID]      # 【不常用】退出容器时会让容器停止,本机的输入直接输到容器中
$ docker exec -it [容器ID]    # 退出容器时不会让容器停止,在已运行的容器中执行命令,不创建和启动新的容器

# 设置容器在docker启动时自动启动
$ docker container update --restart=always [容器名字]

这里要特别说一下 docker run 的 option,因为最常用:

  1. --name 为容器指定一个名称;
  2. -d 容器启动后进入后台,并返回容器 ID,即启动守护式容器;
  3. -P 【不常用】随机端口映射;
  4. -p 80:8080 将本地 80 端口映射到容器的 8080 端口;
  5. bash 容器启动以后,内部第一个执行的命令。这里启动 bash,保证用户可以使用 Shell;
  6. -i 以交互模式运行容器,通常与 -t 同时使用;
  7. -t 为容器重新分配一个伪输入终端,容器的 Shell 会映射到当前的 Shell,然后在本机窗口输入的命令,就会传入容器,通常与 -i 同时使用;
  8. --rm 在容器终止运行后自动删除容器文件;
  9. --restart=always 设置容器自启动;
  10. -v /xxx:/yyy 映射命令,把本机的 xxx 目录映射到容器中的 yyy 目录,也就是说改变本机的 xxx 目录下的内容, 容器 yyy 目录中的内容也会改变;

三、Docker 私有化部署

# 私有化部署
https://bbs.huaweicloud.com/blogs/196661

# 1、下载镜像
$ docker pull registry:2

# 2、运行容器
$ docker run  -d --restart=always  -v /opt/registry:/var/lib/registry -p 5000:5000 --name myregistry registry:2

# 私有化构建
$ docker build . --file Dockerfile --tag 127.0.0.1:5000:mrgaogang/iot-web:latest

# 私有化发布
$ docker push 127.0.0.1:5000:mrgaogang/iot-web:latest

# 注意,上传镜像时报错了:http: server gave HTTP response to HTTPS client

# 【在docker push 的客户端执行,而不是私有服务器】解决办法1:
# 1、编辑 /etc/docker/daemon.json,在文件中写入:

{ "insecure-registries":["http://你的ip:5000"] }

# 【在docker push 的客户端执行,而不是私有服务器】或者快解决办法2

$ sudo vim /usr/lib/systemd/system/docker.service
修改里面的内容 为 ExecStart=/usr/bin/dockerd  --containerd=/run/containerd/containerd.sock --insecure-registry 你的ip:5000

# 2、重启生效:

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
# 再次上传,问题解决:
$ docker push 127.0.0.1:5000:mrgaogang/iot-web:latest