Docker常用命令
2022年11月20日
Docker常用命令
Docker安装
确定CentOS7及以上版本
cat /etc/redhat-release
卸载旧版本
https://docs.docker.com/engine/install/centos/
安装gcc相关
yum -y install gcc
yum -y install gcc-c++
安装需要的软件包
yum install -y yum-utils
配置yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新yum软件包索引
yum makecache fast
安装docker
yum -y install docker-ce docker-ce-cli containerd.io
启动docker
systemctl start docker
配置Docker镜像加速地址
mkdir -p /etc/docker
#注意地址用自己阿里云账号获取的加速地址
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://a8kj0lob.mirror.aliyuncs.com"]
}
EOF
重启docker
systemctl restart docker
Docker基础命令
#启动docker
systemctl start docker
#停止docker
systemctl stop docker
#重启docker
systemctl restart docker
#查看docker状态
systemctl status docker
#开机启动
systemctl enable docker
#查看docker概要信息
docker info
#查看docker总体帮助文档
docker --help
#查看docker命令帮助文档
docker 具体命令 --help
Docker镜像命令
列出镜像
docker images
OPTIONS说明:
- -a :列出本地所有的镜像(含历史映像层)
- -q :只显示镜像ID。
- REPOSITORY:表示镜像的仓库源
- TAG:镜像的标签版本号
- IMAGE ID:镜像ID
- CREATED:镜像创建时间
- SIZE:镜像大小
搜索镜像
docker search 某个XXX镜像名字
下载镜像
docker pull 镜像名字[TAG]
#下载 nginx 版本为1.14 如果没有写版本,则默认为 latest 即最新版本
docker pull nginx:1.14
查看镜像/容器/数据卷所占的空间
docker system df
删除镜像
#删除单个镜像
docker rmi -f 镜像ID
#删除多个
docker rmi -f 镜像名1:TAG 镜像名2:TAG
Docker容器命令
新建+启动容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
#新建容器并启动rabbitmq 并指定 用户密码
docker run -d --name rabbitmq -p 15672:15672 -p 5672:5672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin rabbitmq
#新建并启动nginx 并挂载配置文件和一个文件夹
docker run -d --name nginx_docker -p 1999:1999 -v /home/nginx_test:/opt/nginx_data -v /home/nginx.conf:/etc/nginx/nginx.conf nginx:1.14
- -p:将宿主机和容器端口进行映射,格式为:宿主机端口:容器端口;
- --name:指定容器名称,之后可以通过容器名称来操作容器;
- -e:设置容器的环境变量,例如制定容器内软件的用户名密码
- -v:将宿主机上的文件挂载到宿主机上,格式为:宿主机文件目录:容器文件目录;其中挂载时,最好宿主机先把目录、文件等创建好,如果宿主机没有目录会自动创建。如果没有文件,会创建文件名格式的目录(这样是错误的)。
- -d:表示容器以后台方式运行。
如果容器运行失败,则通过日志查看
docker logs 容器id
#动态查看
docker logs -f 容器id
列出容器
#列出所有正在运行的容器
docker ps
#列出容器名为 rabbitmq的容器
docker ps -f name=rabbitmq
#列出所有容器,包括运行失败、未运行
docker ps -a
进入/退出容器
#进入
docker exec -it 容器ID /bin/bash
#退出
exit;
启动/停止容器
#启动已停止运行的容器
docker start 容器ID或者容器名
#停止容器
docker stop 容器ID或者容器名
#重启容器
docker restart 容器ID或者容器名
#强制停止容器
docker kill 容器ID或容器名
删除容器
docker rm 容器ID
拷贝文件
#从容器里面拷文件到宿主机
docker cp 容器名:要拷贝的文件在容器里面的路径 要拷贝到宿主机的相应路径
#从宿主机拷文件到容器里面
docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径
查看容器的IP地址
#查看容器的IP地址
docker inspect --format '{{ .NetworkSettings.IPAddress }}' $ContainerName
将容器启动方式改为always
docker container update --restart=always $ContainerName
同步宿主机时间到容器
docker cp /etc/localtime $ContainerName:/etc/
查看容器资源占用状况
- 查看指定容器资源占用状况,比如cpu、内存、网络、io状态:
docker stats $ContainerName
- 查看所有容器资源占用情况:
docker stats -a
容器网络相关
- 查看所有网络
docker network ls
容器网络主要解决容器之间互相通信的问题。因此一般在在新建容器时,制定当前容器的网络模式
常用的网络模式有:
- bridge模式:使用--network bridge指定,默认使用该模式
- host模式:使用--network host指定
- container模式:使用--network container:NAME或者容器ID指定
#以host模式启动eureka容器,注:该模式不需要指定端口映射
docker run -d --network host --name eureka eureka:1.1
#启动eureka容器
docker run --name eureka -p 1111:1111 -p 2222:2222 -d eureka:1.1
#启动auth容器,并指定网络为容器eureka的网络
docker run --name auth --network container:eureka -d auth:1.1
也可以新建自定义网络,让容器指定自定义的网络
docker network create test_network
docker run -d -p 1111:1111 --network test_network --name eureka eureka:1.1
Docker容器清理
#查看Docker占用的磁盘空间情况
docker system df
#删除所有关闭的容器
docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs docker rm
#删除所有dangling数据卷(即无用的 volume):
docker volume rm $(docker volume ls -qf dangling=true)
Dockerfile
Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。
实例
# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER lr
# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为eureka_docker.jar
ADD eureka.jar eureka_docker.jar
# 运行jar包
RUN bash -c 'touch /eureka_docker.jar'
ENTRYPOINT ["java","-Xms100m", "-Xmx256m", "-jar","/eureka_docker.jar","--spring.profiles.active=dev"]
#暴露1951端口作为微服务
EXPOSE 1951
在Dockerfile目录下构建镜像
docker build -t eureka:1.1 .