Docker常用命令
常用地址
https://www.docker.com/products/docker-hub/
Docker常用命令
基本指令
# 查看版本信息
docker version
# 显示统信息,包括镜像和容器数
docker info
# 帮助命令
docker --help
# 容器资源使用情况
docker stats
docker stats <container_name_or_id>
镜像操作
# 查看镜像
docker images
# 查看镜像-包含中间镜像层
docker images -a
# 删除单个镜像
docker rm 容器id
# 拉取镜像
docker pull 镜像名称:版本号
# 启动镜像
docker run -it 远程镜像名称:版本号 /bin/bash \
# 为容器指定一个名称
--name="容器新名字" \
# 后台运行容器,并返回容器ID,也即启动守护式容器
-d \
# 以交互模式运行容器,通常与 -t 同时使用
-i \
# 为容器重新分配一个伪输入终端,通常与 -i 同时使用
-t \
# 随机端口映射
-P \
# 指定端口映射
-p 9200:9200 \
-d: 后台运行容器并返回容器 ID。
-it: 交互式运行容器,分配一个伪终端。
--name: 给容器指定一个名称。
-p: 端口映射,格式为 host_port:container_port。
-v: 挂载卷,格式为 host_dir:container_dir。
--rm: 容器停止后自动删除容器。
--env 或 -e: 设置环境变量。
--network: 指定容器的网络模式。
--restart: 容器的重启策略(如 no、on-failure、always、unless-stopped)。
-u: 指定用户。
# 删除所有镜像
docker rmi `docker images -q`
容器操作
# 查看正在运行容器
docker ps
# 查看所有容器
docker ps -a
# 启动容器
docker start 容器ID或者容器名
# 重启容器
docker restart 容器ID或者容器名
# 停止容器
docker stop 容器ID或者容器名
# 强制停止容器
docker kill 容器ID或者容器名
# 停用全部运行中的容器
docker kill $(docker ps -a -q)
# 删除容器
docker rm -f 容器ID或者容器名
# 删除全部容器
docker rm -f $(docker ps -aq)
# 进入容器内部
docker exec -it 容器ID或者容器名 /bin/bash
# 推出容器
exit
# 容器详细信息
docker inspect <container_name_or_id>
容器转为镜像流程
docker commit 容器id 镜像名称:版本号
docker save -o 压缩文件名称 镜像名称:版本号
docker load –i 压缩文件名称 例如:docker load -i envoy-1.26.1.tar.gz
数据卷容器
# 数据卷未映射时,默认存储位置
cd /var/lib/docker/volumes
# 创建启动c1数据卷容器,使用 –v 参数 设置数据卷
docker run –it --name c1 –v /volume centos:7 /bin/bash
# 创建启动 c2 c3 容器,使用 –-volumes-from 参数 设置数据卷
docker run –it --name=c2 --volumes-from c1 centos:7 /bin/bash
docker run –it --name=c3--volumes-from c1 centos:7 /bin/bash
# 案例:执行完之后三个容器挂载在宿主机同一个数据卷下
# 比如:/06f881244d61ebd6e36992c8186fc944ba4f609d966b8668d7522710e6ed3c7e/_data
docker run -it --name c3 -v /volume centos:7
docker run -it --name c1 --volumes-from c3 centos:7
docker run -it --name c2 --volumes-from c3 centos:7
文件操作
# docker容器内文件复制
docker container cp nginx:/etc/nginx ~/nginx/
docker container cp nginx:/usr/share/nginx/html/cert ~/nginx/html/cert
# 在宿主机上打包目录
tar -cvf halo.tar /root/halo
# 将tar文件复制到容器内
docker cp halo.tar halo-blog:/tmp/
# 进入容器内并解压tar文件
docker exec -it halo-blog bash -c "mkdir -p /app/static/halo && tar -xvf /tmp/halo.tar -C /app/static/halo"
# 删除容器内的tar文件
docker exec -it halo-blog rm /tmp/halo.tar
linux安装 Docker
安装
# yum 包更新到最新
yum update
# 安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
# 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
yum makecache fast
# 安装docker,出现输入的界面都按 y
yum install -y docker-ce
# 查看docker版本,验证是否验证成功
docker -v
卸载
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine docker-ce
启动
# docker用的端口较多,关闭防火墙,或者开启全部端口1/68783
# 关闭防火墙
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld
# 启动docker
systemctl start docker
# 查看版本
docker -v
Macos安装 Docker 和 Docker Compose
#安装docker自带dockercompose
sudocurl-L"https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)"-o/usr/local/bin/docker-compose
echo'exportPATH="/usr/local/bin:$PATH"'>>~/.bash_profile
source~/.bash_profile
docker-compose-version
dockercompose-version
linux安装 Docker Compose
安装
sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 或者换源加速下载
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
# 权限
chmod +x /usr/local/bin/docker-compose
# 版本
docker-compose -version
# 软链
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
# Base自动补全命令
curl -L https://raw.githubusercontent.com/docker/compose/1.29.1/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
# 如果这里出现错误,需要修改自己的hosts文件:
echo "199.232.68.133 raw.githubusercontent.com" >> /etc/hosts
卸载
# 二进制包方式安装的,删除二进制文件即可
rm /usr/local/bin/docker-compose
配置国内镜像源
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com",
"https://docker.mirrors.ustc.edu.cn",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com",
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://cr.console.aliyun.com",
"https://docker.nju.edu.cn",
"https://ustc-edu-cn.mirror.aliyuncs.com/",
"https://ccr.ccs.tencentyun.com/",
"https://docker.registry.cyou",
"https://docker-cf.registry.cyou",
"https://docker.jsdelivr.fyi",
"https://dockercf.jsdelivr.fyi",
"https://dockertest.jsdelivr.fyi",
"https://dockerpull.com",
"https://dockerproxy.cn",
"https://hub.uuuadc.top",
"https://docker.1panel.live",
"https://hub.rat.dev",
"https://docker.anyhub.us.kg",
"https://docker.chenby.cn",
"https://dockerhub.jobcher.com",
"https://dockerhub.icu",
"https://docker.ckyl.me",
"https://docker.awsl9527.cn",
"https://docker.hpcloud.cloud",
"https://atomhub.openatom.cn"
]
}
EOF
重启docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker
Docker创建自定义网络
(用于容器之间的通信 common-network 是网络名称 可改)
docker network create common-network
创建自定义网络(用于容器之间的通信 common-network 是网络名称 可改)
docker network ls
查看网络
docker network rm
名称 删除自定义网络
Docker-Run命令部署容器
Docker-Compose部署容器
Dockerfile
# 该镜像需要依赖的基础镜像
FROM openwhisk/java8action:ff19223
# 将当前目录下的jar包复制到docker容器的/目录下
ADD sundear-admin.jar /sundear-admin.jar
# 运行过程中创建一个mall-tiny-docker-file.jar文件
RUN bash -c 'touch /sundear-admin.jar'
# 声明服务运行在8080端口
EXPOSE 8500
# 指定docker容器启动时运行jar包
ENTRYPOINT ["java", "-jar","/sundear-admin.jar"]
# 指定维护者的名字
MAINTAINER zhangxin
执行
# 通过dockerfile构建镜像:(注意后面的 空格+.)
# docker bulid –f dockerfile文件路径 –t 镜像名称:版本
cd /app
docker build -t garlic/sundear-admin:3.8.3 .
# docker run 创建容器
docker rm -f sundear-admin
docker run -p 8500:8500 --name sundear-admin \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/sundear-admin/logs:/var/logs \
-v /mydata/app/sundear-admin/uploadPath:/home/ruoyi/uploadPath \
-d garlic/sundear-admin:3.8.3
其他dockerfile示例
# 需求:自定义centos7镜像。要求: 1. 默认登录路径为 /usr 2. 可以使用vim
# 定义父镜像
FROM centos:7
# 定义作者信息:
MAINTAINER itheima [itheima@itcast.cn](mailto:itheima@itcast.cn)
# 执行安装vim命令:
RUN yum install -y vim
# 定义默认的工作目录:
WORKDIR /usr
# 定义容器启动执行的命令:
CMD /bin/bash
# 需求:定义dockerfile,发布springboot项目
FROM java:8
MAINTAINER itheima [itheima@itcast.cn](mailto:itheima@itcast.cn)
ADD springboot.jar app.jar
# 定义容器启动执行的命令:
CMD java–jar app.jar
Dockerfile关键字
关键字 | 作用 | 备注 |
---|---|---|
FROM | 指定父镜像 | 指定dockerfile基于那个image构建 |
MAINTAINER | 作者信息 | 用来标明这个dockerfile谁写的 |
LABEL | 标签 | 用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker image基本信息中可以查看 |
RUN | 执行命令 | 执行一段命令 默认是/bin/sh 格式: RUN command 或者 RUN [“command” , “param1”,“param2”] |
CMD | 容器启动命令 | 提供启动容器时候的默认命令 和ENTRYPOINT配合使用.格式 CMD command param1 param2 或者 CMD [“command” , “param1”,“param2”] |
ENTRYPOINT | 入口 | 一般在制作一些执行就关闭的容器中会使用 |
COPY | 复制文件 | build的时候复制文件到image中 |
ADD | 添加文件 | build的时候添加文件到image中 不仅仅局限于当前build上下文 可以来源于远程服务 |
ENV | 环境变量 | 指定build时候的环境变量 可以在启动的容器的时候 通过-e覆盖 格式ENV name=value |
ARG | 构建参数 | 构建参数 只在构建的时候使用的参数 如果有ENV 那么ENV的相同名字的值始终覆盖arg的参数 |
VOLUME | 定义外部可以挂载的数据卷 | 指定build的image那些目录可以启动的时候挂载到文件系统中 启动容器的时候使用 -v 绑定 格式 VOLUME [“目录”] |
EXPOSE | 暴露端口 | 定义容器运行的时候监听的端口 启动容器的使用-p来绑定暴露端口 格式: EXPOSE 8080 或者 EXPOSE 8080/udp |
WORKDIR | 工作目录 | 指定容器内部的工作目录 如果没有创建则自动创建 如果指定/ 使用的是绝对地址 如果不是/开头那么是在上一条workdir的路径的相对路径 |
USER | 指定执行用户 | 指定build或者启动的时候 用户 在RUN CMD ENTRYPONT执行的时候的用户 |
HEALTHCHECK | 健康检查 | 指定监测当前容器的健康监测的命令 基本上没用 因为很多时候 应用本身有健康监测机制 |
ONBUILD | 触发器 | 当存在ONBUILD关键字的镜像作为基础镜像的时候 当执行FROM完成之后 会执行 ONBUILD的命令 但是不影响当前镜像 用处也不怎么大 |
STOPSIGNAL | 发送信号量到宿主机 | 该STOPSIGNAL指令设置将发送到容器的系统调用信号以退出。 |
SHELL | 指定执行脚本的shell | 指定RUN CMD ENTRYPOINT 执行命令的时候 使用的shellDocker 应用部署 |
评论
0 评论