Docker 基础
安装
-
卸载老版本(如果有)
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
-
安装 yum-utils 工具
yum install -y yum-utils
-
配置 yum-utils 的 yum-config-manager 源,以下二选一
# 阿里 yum-config-manager \ --add-repo \ https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 清华大学 yum-config-manager \ --add-repo \ https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
-
安装 docker
# 没有指定版本就是安装最新版本 yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
安装了 5 个软件,分别是:docker-ce、 docker-ce-cli、containerd.io、docker-buildx-plugin、docker-compose-plugin
如果要指定版本安装,就把这些软件目前可下载的版本列出来看一下,然后再选择对应的版本安装
# 看 docker-ce 版本 yum list docker-ce --showduplicates | sort -r # 这是下载的,第二列从第一个 : 开始第一个 - 结束 docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable
上面的可用版本分别是:18.09.1、18.09.0、18.06.1.ce、18.06.0.ce
# 指定版本安装 yum install docker-ce-18.09.1 docker-ce-cli containerd.io
-
dockerhub 被和谐了,替换镜像源,依次执行下面4条命令
mkdir -p /etc/docker tee /etc/docker/daemon.json <<EOF { "registry-mirrors": [ "https://hub.uuuadc.top", "https://docker.anyhub.us.kg", "https://dockerhub.jobcher.com", "https://dockerhub.icu", "https://docker.ckyl.me", "https://docker.awsl9527.cn" ] } EOF systemctl daemon-reload systemctl restart docker
常用命令
系统级别
systemctl start docker
启动 dockersystemctl enable docker
开机启动 dockersystemctl restart docker
重启 docker
镜像
docker search nginx
搜索镜像。OFFICAL:是否是官方发布的镜像,OK 表示是,为空就不是docker pull nginx
拉取镜像- 不加版本就是拉取最新的
- 如果要指定版本,docker search 就不合适了,去 docker hub 去找
docker pull nginx:1.26.0
拉取指定版本镜像,这个命令 docker hub 也有
docker images
已存在的镜像。这是简写,全写是docker image ls
docker rmi
删除镜像。可以跟【镜像名:版本】或【镜像ID】
容器
-
docker ps
当前运行中的容器- 不带参数就是查看运行中的容器
docker ps -a
查看所有容器,包括没运行的docker -ps -aq
查看所有容器,只显示容器id
-
docker run 镜像id或镜像名称
运行容器。为指定镜像运行一个容器-
docker run nginx
创建并启动一个 nginx 的容器,如果不跟版本号就是 latest,如果当前没有这个镜像还会先拉取再运行 -
docker run nginx:1.26.0
创建并启动一个 nginx 的容器,版本是 1.26.0 -
run 还能带一些参数,比如后台启动、自定义名称、端口映射、目录挂载等
# -d 后台启动 # --name 自定义容器名称 # -p 端口映射(8080:80 表示宿主机 8080 映射到 容器 80) # -v 目录挂载(后面说) docker run -d --name mynginx -p 8080:80 nginx
-
-
docker stop 容器id或容器名称
停止容器 -
docker start 容器id或容器名称
启动容器。docker restart xxx
重启容器,不管是否运行都重启 -
docker logs 容器id或容器名称
查看容器日志 -
docker stats 容器id或容器名称
查看容器运行状态。可以看网络、CPU、内存等资源使用情况 -
docker exec -it 容器id或容器名称 bash
进入容器 -
docker ps rm 容器id或容器名称
删除容器。要先停止才能删除,运行中的要强制删除docker ps rm -f 容器id
目录挂载
- 容器被删除,里面的数据就没了
- 因为容器为了最小化资源使用,里面很多命令都没有,所以修改数据不方便
运行容器的时候指定参数 -v 完成目录的挂载,同 -p 一只,也是先先宿主机目录在写容器目录,比如下面的命令:
docker run -d -v /app/nginx/html:/usr/share/nginx/html -p 8080:80 nginx
- nginx 的欢迎页(首页)是
/usr/share/nginx/html/index.html
,上面的命令会让 nginx 到宿主机的/app/nginx/html
下找index.html
- 如果宿主机没有挂载的目录会自动创建(但是不会创建文件)
卷挂载
目录挂载会自动创建目录,但是不会创建文件,卷挂载就是用来解决这个问题的
# 运行一个容器,使用卷挂载
docker run -d -v nghtml:/usr/share/nginx/html -p 8090:80 nginx
- nghtml 是卷名,自定义的,随便取什么名都行
- 冒号后面是容器目录
nghtml 位置在哪?docker 用宿主机的专门一个位置存放所有卷挂载的文件: /var/lib/docker/volumes
docker volume ls
查看所有的卷docker volume inspect 卷名
查看卷的详情,Mountpoint 就是这个卷的位置