共计 5957 个字符,预计需要花费 15 分钟才能阅读完成。
docker 常见命令
- 查看版本
docker -v
- 查看具体版本
docker version
- 查看 docker 根本信息
docker info
镜像相干的命令
镜像仓库地址:https://hub.docker.com
- 查看本地曾经装置的镜像
docker images
- 搜寻指定镜像
docker search <image-name>
# 比方搜寻 centos 镜像
docker search centos
- 拉取镜像
docker pull <image-name>
# 比方拉取 centos 镜像(将会拉取最新版本的镜像,即 latest 版本)docker pull centos
# 拉取指定版本的镜像
docker pull ubuntu:16.04
- 删除镜像
docker rmi <image-name>
# 比方删除 centos 镜像
docker rmi centos
- 删除所有的镜像
docker rmi $(docker images -q)
# 查看所有镜像的镜像 id
docker images -q
- 更新镜像
# 更新镜像前,须要应用镜像创立一个容器
docker run -it ubuntu:15.10 bash
# 在运行的容器外部应用 apt-get update 更新
# 更新结束之后,输出 exit 命令退出容器
# 应用 docker commit 来提交容器正本
docker commit -m="has update" -a="alex" e218edb10161 alex/ubuntu:v2
# -m 示意提交的形容信息
# -a 示意提交的镜像作者
# e218edb10161 示意容器的 id
# alex/ubuntu:v2 示意指定要创立的指标镜像名
# 查看新的镜像
docker images
# 应用新镜像 alex/ubuntu:v2 来启动一个容器
docker run -it alex/ubuntu:v2 bash
- 构建镜像
- vim ~/glory/codes/book/demo/Dockerfile 填充以下内容,构建一个 centos 8 零碎
# 指定应用哪个镜像源
FROM centos:8
# 如果写了 3 次 RUN 那么将会在 docker 上新建 3 层,会导致镜像收缩过大,上面这种形式只会创立 1 层镜像
RUN /bin/echo 'root:123456' | chpasswd; \
useradd alex; \
/bin/echo 'alex:123456' | chpasswd; \
/bin/echo -e "LANG=\"en_US.UTF-8\"" > /etc/default/local
EXPOSE 22
EXPOSE 80
CMD /usr/sbin/sshd -D
- 开始构建镜像,留神不要在
~/glory/codes/book/demo
目录下放无用的文件,因为会打包所有该目录下的文件而后发送给 docker 引擎,如果文件过多会造成 build 过程迟缓
# -t 示意指定要创立的指标镜像名
# ~/glory/codes/book/demo 示意 Dockerfile 文件所在的目录
docker build -t alex/centos:8.0 ~/glory/codes/book/demo
# 查看曾经构建好的镜像信息
docker images
# 应用新的镜像来创立新容器
docker run -it alex/centos:8.0 bash
- 设置镜像标签
# 先查看镜像
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
alex/centos 8.0 594ab4747ed4 14 minutes ago 210MB
# 设置镜像标签
$ docker tag 594ab4747ed4 alex1/centos1:8.1.1
# 再次查看镜像信息会多一个标签
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
alex/centos 8.0 594ab4747ed4 14 minutes ago 210MB
alex1/centos1 8.1.1 594ab4747ed4 14 minutes ago 210MB
容器相干的命令
- 查看容器的零碎版本信息
# 进入容器后执行
cat /proc/version
# 比方会输入以下内容
Linux version 4.19.121-linuxkit (root@18b3f92ade35) (gcc version 9.2.0 (Alpine 9.2.0)) #1 SMP Thu Jan 21 15:36:34 UTC 2021
- 查看所有的容器
docker ps -a
# 或者应用以下命令,是一样的成果
docker container ls -a
# 查看最初一次创立的容器
docker ps -l
- 查看所有曾经运行的容器
docker ps
- 查看容器端口映射
docker port <container-name or container-id>
- 查看 docker 底层信息(比方:查看指定容器的 ip 地址)
# 查看 docker 容器的配置和状态信息
docker inspect <container-name or container-id>
# 查看容器的 ip 地址
docker inspect <container-name or container-id> | grep IPAddress
# 比方查看容器 id 为 66204be9fe65 的容器所对应的 ip 地址
docker inspect 66204be9fe65 | grep IPAddress
# 比方查看容器名称为 alex 所对应的 ip 地址
docker inspect alex | grep IPAddress
- 创立容器并把镜像复原到容器当中,且启动容器
docker run [-i][-t][-v][--name][-d][-p]
# -i 示意 interactive 交互式
# -t 示意失去一个 terminal
# --name 示意批改容器名称
# -d 示意以守护过程的形式运行(默认不会进入容器,想要进入容器则须要应用 docker exec 命令)# -p 示意 ** 指定 ** 映射端口
# -P(大写的字母 p)示意 ** 随机 ** 映射端口
# /bin/bash 和 bash 等效
docker run -it <image-name> /bin/bash
# 比方创立一个新容器并且进入 ubuntu:16.04 镜像
docker run -it ubuntu:16.04 bash
# 或者
docker run -it ubuntu:16.04 /bin/bash
# 或者
docker run -it ubuntu:16.04
# 以 centos 镜像创立一个新容器,并批改新容器名称为 alex-container
docker run -it --name alex-container centos bash
# 以守护过程的形式运行(后盾运行)docker run -d --name alex-container centos
# 或者
docker run -di --name alex-container centos
# 指定容器绑定的网络地址,这样咱们就能够通过拜访 127.0.0.1:5001 来拜访容器的 5000 端口(默认绑定的都是 tcp 端口)docker run -d -p 127.0.0.1:5001:5000 centos:8.0 bash
# 如果须要绑定 udp 端口,则
#(还能够进入容器就间接执行 python app.py 命令)docker run -d -p 127.0.0.1:5001:5000/udp centos:8.0 python app.py
# 比方,装置 hyperf 镜像并启动容器
# 如果 docker 启动时开启了 selinux-enabled 选项,容器内拜访宿主机资源就会受限,所以启动容器时能够减少 --privileged -u root 选项
docker run --name hyperf \
-v /workspace/skeleton:/data/project \
-p 9501:9501 -it \
--privileged -u root \
--entrypoint /bin/sh \
hyperf/hyperf:7.4-alpine-v3.11-swoole
# 如果须要开明多个端口时,能够参考
docker run --name api_dfo_hyperf_ws \
-v /Users/pudongping/glory/codes/dfo/api_dfo_hyperf:/api_dfo_hyperf \
-p 9502:9502 \
-p 9503:9503 \
-p 9504:9504 \
-p 9505:9505 -it \
--entrypoint /bin/sh \
alex/alex_api_dfo:v1.0
- 启动容器
docker start <container-name or container-id>
# 比方启动容器名称为 redis-alex 的容器
docker start redis-alex
# 比方启动容器 id 为 c8c0c770ac5b 的容器
docker start c8c0c770ac5b
- 间接进入曾经创立的容器(不会启动容器)
docker start -i <container-name or container-id>
# 比方进入容器 id 为 66204be9fe65 的容器
docker start -i 66204be9fe65
# 比方进入容器名称为 alex 的容器
docker start -i alex
- 重启容器
docker restart <container-name or container-id>
# 比方重启容器名称为 redis-alex 的容器
docker restart redis-alex
# 比方重启容器 id 为 c8c0c770ac5b 的容器
docker restart c8c0c770ac5b
- 进入曾经运行中的容器
docker exec -it <container-name or container-id> bash
# 比方进入容器名称为 redis-alex 的容器
docker exec -it redis-alex bash
# 比方进入容器 id 为 c8c0c770ac5b 的容器
docker exec -it c8c0c770ac5b bash
# 进入容器之后执行 shell 命令或者执行 shell 脚本
docker exec -it <container-name or container-id> /bin/sh -c "while true; do echo hello world; sleep 1; done"
# 比方进入容器 id 为 c8c0c770ac5b 的容器,并且进入容器后执行 `bash /portal_api_dfo_hyperf/server.sh restart` 脚本
docker exec -it c8c0c770ac5b /bin/sh -c "bash /portal_api_dfo_hyperf/server.sh restart"
- 进行容器
docker stop <container-name or container-id>
# 比方进行容器名称为 redis-alex 的容器
docker stop redis-alex
# 比方进行容器 id 为 c8c0c770ac5b 的容器
docker stop c8c0c770ac5b
- 退出容器
exit
- 删除容器
docker rm <container-name or container-id>
# 也能够退出 -f 参数,强制移除正在运行中的容器
docker rm -f 1e560fca3906
# 清理掉所有处于终止状态的容器
docker container prune
- 批改容器名称
docker rename <container-name or container-id> <new-container-name>
# 比方将容器 redis-alex 改名为 redis-tt
docker rename redis-alex redis-tt
- 查看容器的规范输入
docker logs <container-name or container-id>
# 比方查看容器 id 为 c8c0c770ac5b 的容器规范输入内容
docker logs c8c0c770ac5b
# 也能够退出 -f 参数,像应用 tail -f 一样来输入容器外部的规范输入
docker logs -f c8c0c770ac5b
容器与宿主机之间的文件或者目录拷贝
- 从宿主机拷贝文件到容器中
docker cp <local-directory-or-file> <container-name>:<container-directory-or-file>
# 比方将宿主机中的 /home/alex/test.txt 文件拷贝到 centos1 容器中的 /test.txt
docker cp /home/alex/test.txt centos1:/test.txt
- 从容器拷贝到宿主机中
docker cp <container-name>:<container-directory-or-file> <local-directory>
# 比方将 centos1 容器中的 /test 目录拷贝到宿主机的 /home/alex 目录下
docker cp centos1:/test /home/alex
目录挂载(创立容器的时候就须要进行目录挂载)
docker run -di -v <local-directory>:<container-directory> <image-name>
# 在 windows 下挂载(留神门路的书写形式)# 比方以 centos 镜像创立一个容器,并将本地 D 盘中的 alex 目录,挂载到容器中的 /usr/local/demo 目录
docker run -di -v d:\alex:/usr/local/demo centos
# 在 linux 下挂载
# 比方以 centos 镜像创立一个容器,并将本地的 /home/alex/alex 目录,挂载到容器中的 /usr/local/demo 目录
docker run -di -v /home/alex/alex:/usr/local/demo centos
导出和导入容器
- 导出容器快照
docker export <container-id> > <your-backup-name.tar>
# 比方将容器 id 为 7691a814370e 的容器导出快照为 alex.tar
docker export 7691a814370e > alex.tar
- 导入容器快照
cat <your-backup-name.tar> | docker import - <image-author-name>/<your-new-image-name>:<your-new-image-version>
# 比方将容器快照文件 alex.tar 导入到 alex-demo 镜像并定义 alex-demo 镜像的作者为 alex,版本号为 v1.0
cat alex.tar | docker import - alex/alex-demo:v1.0
# 此外,也能够通过指定 url 或者某个目录来导入
docker import http://example.com/example-image.tgz example/image-repo:v1.0
原文链接地址
正文完