docker学习参考文档
学习途径
Docker官网:
Docker中文网站:
Docker Hub官网: (仓库)
借鉴狂神老师b站视频以及笔记
在此,十分感谢狂神老师开源精神
安装
介绍
镜像image:
docker镜像就好比是模板,可以通过这个模板创建容器服务,tomcat镜像=>run运行=>tomcat01容器(提供服务器)
通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中)
容器container:
docker利用容器技术,独立运行一个或者一个组应用,通过·镜像来创建
启动,停止,删除,基本命令
目前就可以理解为建议linux系统,项目
仓库repository:
存放镜像地方
公有仓库 dockerhub 阿里云都有容器服务器(配置镜像加速)
私有仓库
总结
需要正确的理解仓储/镜像/容器这几个概念 :
- Docker 本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好形成一个 可交付的运行环境,这个打包好的运行环境就似乎
image镜像文件。只有通过这个镜像文件才能生 成 Docker 容器。image 文件可以看作是容器的模板。Docker 根据
image 文件生成容器的实例。 同一个 image 文件,可以生成多个同时运行的容器实例。 - image 文件生成的容器实例,本身也是一个文件,称为镜像文件。
- 一个容器运行一种服务,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例, 也就是我们的容器
- 至于仓库,就是放了一堆镜像的地方,我们可以把镜像发布到仓库中,需要的时候从仓库中拉下来 就可以了。
环境准备
环境准备:
1.linux基础
2.centos 7
3.xhell连接远程服务器操作
环境查看
[root@iz8vb15btme7reio6zs71ez /]# uname -r
3.10.0-514.26.2.el7.x86_64
[root@iz8vb15btme7reio6zs71ez /]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
开始安装:
linux安装版本
1.卸载旧版本 (如果有)
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
出现如下提示代表卸载成功
Loaded plugins: fastestmirror
No Match for argument: docker
No Match for argument: docker-client
No Match for argument: docker-client-latest
No Match for argument: docker-common
No Match for argument: docker-latest
No Match for argument: docker-latest-logrotate
No Match for argument: docker-logrotate
No Match for argument: docker-engine
No Packages marked for removal
2.需要的安装包 环境
ps:如果出现问题就运行提示中给出的运行代码
# yum install -y yum-utils device-mapper-persistent-data lvm2 git
3.设置镜像仓库
# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4.更新yum包索引
yum makecache fast
5.安装docker引擎 ce社区版推荐 ee企业版
yum install docker-ce docker-ce-cli containerd.io
6.启动docker
systemctl start docker
7.打印 docker version出现信息说明安装成功
[root@iz8vb15btme7reio6zs71ez /]# docker version
Client: Docker Engine - Community
Version: 20.10.7
API version: 1.41
Go version: go1.13.15
Git commit: f0df350
Built: Wed Jun 2 11:58:10 2021
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.7
API version: 1.41 (minimum version 1.12)
Go version: go1.13.15
Git commit: b0f5bc3
Built: Wed Jun 2 11:56:35 2021
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.4.9
GitCommit: e25210fe30a0a703442421b0f60afac609f950a3
runc:
Version: 1.0.1
GitCommit: v1.0.1-0-g4144b63
docker-init:
Version: 0.19.0
GitCommit: de40ad0
8.通过运行
hello-world
映像验证 Docker Engine 是否已正确安装。
docker run hello-world
第一次没有寻找到镜像会自动下载
出现hello from Docker!说明安装成功了
[root@iz8vb15btme7reio6zs71ez /]# docker run hello-world
⭐Unable to find image 'hello-world:latest' locally
⭐拉取 latest: Pulling from library/hello-world
b8dfde127a29: Pull complete
Digest: sha256:df5f5184104426b65967e016ff2ac0bfcd44ad7899ca3bbcf8e44e4461491a9e
Status: Downloaded newer image for hello-world:latest
⭐⭐Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
9.查看下载的hello-word镜像
docker images
[root@iz8vb15btme7reio6zs71ez /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 4cdc5dd7eaad 3 weeks ago 133MB
hello-world latest d1165f221234 4 months ago 13.3kB
了解 卸载docker
卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
删除资源
rm -rf /var/lib/docker
docker默认工作路径
/var/lib/docker
阿里云镜像加速
目的:提高效率
1.登录阿里云,找到容器服务
2.找到镜像加速地址(左边栏最下面 镜像加速器)
操作文档会告诉怎么做 centos
3.配置使用 找到类似下表文件 配置
sudo mkdir -p /etc/docker
//新建目录docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://0p279n1x.mirror.aliyuncs.com"]
}
EOF
//配置阿里云地址
sudo systemctl daemon-reload
//镜像重启
sudo systemctl restart docker
//docker重启
底层原理
docker怎么工作
docker是一个Client-serve结构的系统,docker的守护进程运行在主机上。通过socker从客户端访问。
dockerServe接收到docker-client指令,就会执行这个命令
docker为什么比虚拟机快
1.docker有着比虚拟机更少的抽象层
2.docker利用的是宿主机内核·,vm需要guest os
所以,新建容器时候,docker不需要像虚拟机一样重新加载一个操作系统内核,避免引导操作。虚拟机是加载guest os,分钟级别的。而docker是利用宿主机操作系统,省略了复杂过程,秒级别。
docker常用命令
帮助命令
docker -version #显示版本信息
docker info # 显示系统信息 包括镜像和容器数量
docker --help #帮助命令
镜像命令
docker images 查看所有主机镜像
[root@iz8vb15btme7reio6zs71ez /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 4cdc5dd7eaad 3 weeks ago 133MB
hello-world latest d1165f221234 4 months ago 13.3kB
查看镜像可选
-a --all //列出所有镜像
-q --quite //只显示镜像id
docker search搜索镜像
docker search mysql
[root@iz8vb15btme7reio6zs71ez /]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 11188 [OK]
mariadb MariaDB Server is a high performing open sou… 4251
可选项,通过收藏过滤
--filter=STARS=3000 //搜索出来STARS大于3000得
[root@iz8vb15btme7reio6zs71ez /]# docker search mysql --filter=STARS=3000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 11188 [OK]
mariadb MariaDB Server is a high performing open sou… 4251 [OK]
[root@iz8vb15btme7reio6zs71ez /]#
docker pull 镜像名[:tag版本] 下载镜像
没有tag指定版本默认最新
[root@iz8vb15btme7reio6zs71ez /]# docker pull mysql
Using default tag: latest //如果不写tag默认就是latest
latest: Pulling from library/mysql
33847f680f63: Pull complete //分层下载 dock image核心 联合文件系统
5cb67864e624: Pull complete
1a2b594783f5: Pull complete
b30e406dd925: Pull complete
48901e306e4c: Pull complete
603d2b7147fd: Pull complete
802aa684c1c4: Pull complete
715d3c143a06: Pull complete
6978e1b7a511: Pull complete
f0d78b0ac1be: Pull complete
35a94d251ed1: Pull complete
36f75719b1a9: Pull complete
Digest: sha256:8b928a5117cf5c2238c7a09cd28c2e801ac98f91c3f8203a8938ae51f14700fd //签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest //真实地址
docker pull mysql 5.7 (前提官方文档有支持这版本)
docker rmi 删除镜像
[root@iz8vb15btme7reio6zs71ez /]# docker rmi -f d1165f221234
Untagged: hello-world:latest
Untagged: hello-world@sha256:df5f5184104426b65967e016ff2ac0bfcd44ad7899ca3bbcf8e44e4461491a9e
Deleted: sha256:d1165f2212346b2bab48cb01c1e39ee8ad1be46b87873d9ca7a4e434980a7726
容器命令
⭐⭐⭐有镜像才可以创建容器
docker pull centos 下载centos测试学习
[root@iz8vb15btme7reio6zs71ez /]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
7a0437f04f83: Pull complete
Digest: sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest
新建容器并启动
docker run [可选参数] 镜像
#参数说明
--name='Name' 容器名字 tomcat01 tomcat02,用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口 -p 8080:8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口(常用)
-p 容器端口
容器端口
-p 随机指定端口
# 测试,启动并进入容器
[root@iz8vb15btme7reio6zs71ez /]# docker run -it centos /bin/bash //⭐⭐⭐
[root@26fc6c67f452 /]# ls //查看容器内centos
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
# 从容器口退出
exit
[root@26fc6c67f452 /]# exit
exit
[root@iz8vb15btme7reio6zs71ez /]#
列出所有运行的容器
# docker ps 命令
#列出当前正在运行的容器
-a #列出当前正在运行的容器+带出历史运行过的容器
-n=? #显示最近创建的容器
-q #只显示容器得编号
[root@iz8vb15btme7reio6zs71ez /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@iz8vb15btme7reio6zs71ez /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
26fc6c67f452 centos "/bin/bash" 11 minutes ago Exited (130) 7 minutes ago sharp_wiles
d81717efa43f d1165f221234 "/hello" 2 hours ago Exited (0) 2 hours ago sleepy_archimedes
371e8c74bcf6 d1165f221234 "/hello" 3 hours ago Exited (0) 3 hours ago mystifying_shirley
[root@iz8vb15btme7reio6zs71ez /]#
退出容器
exit #直接从容器停止并退出
ctrl+p+q #可以不停止退出 //⭐⭐⭐⭐⭐⭐⭐⭐
[root@iz8vb15btme7reio6zs71ez /]# docker run -it centos /bin/bash
[root@dba569e5b212 /]# [root@iz8vb15btme7reio6zs71ez /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dba569e5b212 centos "/bin/bash" 22 seconds ago Up 21 seconds laughing_mirzakhani
[root@iz8vb15btme7reio6zs71ez /]#
删除容器
docker rm 容器id #删除指定容器 除正在运行容器
docker rm -f $(docker ps -aq) #强制删除所有容器
docker ps -a -qixargs docker rm #删除所有容器
启动和停止容器
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止当前正在运行的容器
docker kill 容器id #强制停止当前容器
常用其他命令
后台启动容器
# 命令
docker run -d 容器名
# 例子
docker run -d centos # 启动centos,使用后台方式启动
# 问题: 使用docker ps 查看,发现容器已经退出了! 经测试有的不会停止,比如我的。。。。
# 解释:Docker容器后台运行,就必须有一个前台进程,容器运行的命令如果不是那些一直挂起的命令,就会自动退出。
# 比如,你运行了nginx服务,但是docker前台没有运行应用,这种情况下