参考视频
部分参考《深入浅出Docker》
安装Docker
Docker基本组成
镜像(image): 模板->run->容器
容器(container): 独立运行一个或一组应用
仓库(repository): 存放镜像的仓库
安装Docker
uname -r #打印内核release。
cat /etc/os-release # 查看系统版本信息
# Uninstall old versions
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 安装需要的安装包
yum install -y yum-utils
# 设置镜像的仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 更新软件包索引
yum makecache fast
# 安装Docker
yum install docker-ce docker-ce-cli containerd.io
# 启动Docker
systemctl start docker
# 查看Docker版本
docker version
# 测试Docker run
docker run hello-world
# 查看镜像
docker images
# 卸载Docker
# 卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
# 删除资源
rm -rf /var/lib/docker # Docker的默认工作目录
rm -rf /var/lib/containerd
阿里云镜像加速
# 镜像加速器
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://52gt3cq1.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
Docker 操作
Docker原理
Docker run原理图
底层原理
Docker-server运行在主机,Docker-client通过socket连接服务器
Docker为什么比VM快?
- Docker拥有比虚拟机更少的抽象层
- Docker利用宿主机的内核,VM需要自己虚拟一个内核,更快
Docker常用命令
帮助命令
docker version # docker 版本信息
docker info # 显示 Docker 系统信息,包括镜像和容器数
docker 命令 --help
镜像命令
docker images # 查看docker所有镜像
-a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
-f :显示满足条件的镜像;
--format :指定返回值的模板文件;
--no-trunc :显示完整的镜像信息;
-q :只显示镜像ID。
docker search # 从Docker Hub查找镜像
--filter : 过滤
# docker search --filter=stars=3000 mysql
--automated :只列出 automated build类型的镜像;
--no-trunc :显示完整的镜像描述;
-s :列出收藏数不小于指定值的镜像。
docker pull [OPTIONS] NAME[:TAG|@DIGEST] # 从镜像仓库中拉取或者更新指定镜像 默认latest版本
-a :拉取所有 tagged 镜像
--disable-content-trust :忽略镜像的校验,默认开启
docker rmi [OPTIONS] IMAGE [IMAGE...]#删除本地一个或多少镜像。
-f :强制删除;
--no-prune :不移除该镜像的过程镜像,默认移除;
# 删除全部镜像 docker rmi -f $(docker images -aq)
容器命令
#创建一个新的容器并运行一个命令
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
# OPTIONS说明
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器ID;#!!!
-i: 以交互模式运行容器,通常与 -t 同时使用;#!!!
-p: 端口映射,格式为:[主机IP:][主机端口:]容器端口#!!!
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;#!!!
--name="nginx-lb": 为容器指定一个名称;#!!!
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 设置环境变量;#!!!
--env-file=[]: 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-m :设置容器使用内存最大值;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
--link=[]: 添加链接到另一个容器;
--expose=[]: 开放一个端口或一组端口;
--rm : 用完即删(测试用)
# 退出容器
exit # 停止并退出
ctrl+P+Q #退出(但不关闭)容器
#列出容器
docker ps [OPTIONS]
-a :显示所有的容器,包括未运行的。
-f :根据条件过滤显示的内容。
--format :指定返回值的模板文件。
-l :显示最近创建的容器。
-n :列出最近创建的n个容器。
# docker ps -n=1
--no-trunc :不截断输出。
-q :静默模式,只显示容器编号。
-s :显示总的文件大小。
#删除容器 不能删除正在运行的容器
docker rm [OPTIONS] CONTAINER [CONTAINER...]# 删除一个或多少容器
-f :通过SIGKILL信号强制删除一个运行中的容器 # 强制删除
-l :移除容器间的网络连接,而非容器本身
-v :-v 删除与容器关联的卷
# docker ps -a -q|xargs docker rm 删除所有容器
# Docker start/stop/restart 命令
docker start 容器id或name#启动一个或多个已经被停止的容器
docker stop #停止一个运行中的容器
docker restart #重启容器
docker kill # 杀死容器
其他常用命令
# 后台启动应用
docker run -d image
# 注意:docker容器在后台巡行时需要一个前台应用,否则会自动停止
#查看日志
docker logs [OPTIONS] CONTAINER
-f : 跟踪日志输出
--since :显示某个开始时间的所有日志
-t : 显示时间戳
--tail :仅列出最新N条容器日志
# docker run -d centos /bin/bash -c "while true;do echo raja;sleep 1;done"
# docker logs -ft ...
# 查看容器中运行的进程信息,支持 ps 命令参数
docker top [OPTIONS] CONTAINER [ps OPTIONS]
# 注:容器运行时不一定有/bin/bash终端来交互执行top命令,而且容器还不一定有top命令,可以使用docker top来实现查看container中正在运行的进程。
# `-f --filter`格式化参数
//链接: https://www.jianshu.com/p/3a69fe0a9c41
$ docker ps --filter name=nginx
$ docker ps -a --filter exited=0
$ docker ps --filter status=running
$ docker ps --filter expose=3306
$ docker image ls --filter reference=golang:* # 根据镜像名查询
# 获取容器/镜像的元数据。
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
-f :指定返回值的模板文件。
-s :显示总的文件大小。
--type :为指定类型返回JSON。
[
{
"Id": "8b0655f0205b03582320875af806085960214f8c178033cecf37ff183588def2",
"Created": "2021-12-08T05:47:55.318532107Z",
"Path": "/bin/bash",
"Args": [
"-c",
"while true;do echo raja;sleep 1;done"
],
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 15711,
"ExitCode": 0,
"Error": "",
"StartedAt": "2021-12-08T05:47:55.579745125Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
"Image": "sha256:5d0da3dc976460b72c77d94c8a1ad043720b0416bfc16c52c45d4847e53fadb6",
"ResolvConfPath": "/var/lib/docker/containers/8b0655f0205b03582320875af806085960214f8c178033cecf37ff183588def2/resolv.conf",
"HostnamePath":