1.什么是docker
docker是一个开源的应用容器引擎。开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
docker基本组成:
镜像(image):是一个轻量级、独立的、可执行的软件包,包含了运行应用程序所需的一切:代码、运行时环境、系统工具和库。镜像(image)是不可修改的,任何更改都会创建一个新的镜像。镜像是用于创建容器(container),镜像可以创建多个相同的容器实例。
就是把一个应用在硬盘上的文件、及其运行环境、部分系统函数库文件一起打包形成的文件包。这个文件包是只读的。
容器(container):是独立运行的一个或一组应用,应用程序或服务运行在容器里面。 容器(container) 是从 镜像(image) 创建的运行实例,它可以被启动、开始、停止、 删除。 每个 d容器(container) 都是相互隔离的,应用程序在不同的容器中运行不会相互影响,保证安全的平台。
容器保护三个状态:
运行:进程正常运行
暂停:进程暂停,CPU不再运行,并不释放内存
停止:进程终止,回收进程占用的内存、CPU等资源
仓库(registry):镜像仓库是用于存储和分发 docker 镜像的地方。最常用的公共镜像仓库是 Docker Hub,上面有大量的官方和社区共享的镜像。此外,还可以搭建私有的镜像仓库,用于存放自己的镜像。
2.docker安装条件
docker 要求 CentOS 系统的内核版本高于 3.10
#查看内核
uname -r

3.docker官网:https://www.docker.com




4.安装步骤
- 如果要卸载老的版本,或者卸载,可执行命令:
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
- 但是一些镜像、容器、数据卷会存储在/var/lib/docker/目录下,需要你手动删除
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
安装方法:
- 在docker存储库中安装,以便于安装和升级任务,这是推荐的方法。
- 可以下载RPM软件包,手动安装,并完全手动管理升级。这在无法访问互联网的气隙系统上安装docker等情况下非常有用。
- 在测试和开发环境中,可以使用自动化的便利脚本来安装docker
介绍第一种:
- 在新主机上首次安装Docker Engine之前,您需要设置Docker存储库。之后,可以从存储库中安装和更新Docker
#安装docker引擎库软件包
sudo yum install -y yum-utils
#设置镜像仓库
#国外镜像仓库配,如果设置国外的会出现[Errno 14]curl#35-TCP connection reset by peer 或者[Errno 12] curl#35 -Timeout
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#国内镜像,设置阿里云镜像地址(推荐)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

- 安装Docker Engine(docker引擎)最新的版本执行:
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

- 启动docker
#启动docker
sudo systemctl start docker
#停止docker
sudo systemctl stop docker
#重启docker
sudo systemctl restart docker
#重载docker
sudo systemctl reload docker
#查看docker状态
sudo systemctl status docker
#查看docker版本
docker version
#设置docker开机启动
systemctl enable docker

- 通过运行helloworld镜像验证docker引擎安装是否成功
sudo docker run hello-world

5.卸载docker
#停止docker
sudo systemctl stop docker
#卸载命令
sudo yum remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
#镜像、容器、数据卷或者自定义配置文件不会自动删除,需要你手动删除
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
6.设置阿里云镜像加速器



7.基本命令
- docker inames 查看本地镜像
- docker inames -a 查看本地所有镜像(含历史映像层)
- docker inames -q 只显示镜像ID

REPOSITORY:表示镜像的仓库源
TAG:镜像的标签版本号
IMAGE ID:镜像id
CREATED:镜像创建时间
SIZE:镜像大小
- docker search 某个镜像名字 查找某个镜像
- docker search --limit 5 某个镜像名字 查找某个镜像限制前5条

NAME:镜像名字
DESCRIPTION:镜像说明
STARS:点赞数
OFFI:是否是官方的
- docker pull 某个镜像名字 拉取某个镜像
- docker pull 某个镜像名字[:TAG] 拉取某个镜像加版本号

- docker system df 查看镜像/容器/数据卷所占的空间

- docker rmi 某个镜像名字id 删除某个镜像
- docker rmi -f 某个镜像名字id 强制删除某个镜像
- docker rmi -f $( docker images -qa) 删除全部的镜像

- docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...] 运行容器
OPTIONS允许您配置容器的选项:
--name="容器新的名字" 为容器指定一个名称
-d 后台运行容器并返回容器id,也即启动守护式容器(后台运行)
-i 以交互模式运行容器,常与-t同是使用
-t 为容器重新分配一个伪终端,常与-i同时使用
-P 随机端口映射
-p 指定端口映射
- docker ps [OPTIONS] 列出正在运行的容器
OPTIONS选项说明:
-a 列出当前所有正在运行的容器+历史上运行过的容器
-l 显示最近创建的容器
-n 显示最近n个创建的容器
-q 静默模式,只显示容器编号
- exit 退出容器 run进去容器,exit退出,容器停止
- ctrl+p+q 退出容器 run进去容器,ctrl+p+q退出,容器不停止
- docker start 容器id或者容器名称 启动已停止运行的容器
- docker restart 容器id或者容器名称 重启容器
- docker stop 容器id或者容器名称 停止容器
- docker kill 容器id或者容器名称 强制停止容器
- docker rm 容器id或者容器名称 删除已经停止的容器
- docker rm -f $(docker ps -a -q) 删除所有容器(谨慎使用)
- docker ps -a -q | xargs docker rm 删除所有容器(谨慎使用)
- docker logs 容器id 查看容器日志
- docker top 容器id 查看容器运行进程
- docker inspect 容器id 查看容器的内部细节
- docker exec -it 容器id /bin/bash 重新进入容器 用exit退出的话不会导致容器停止(推荐使用)
- docker attach 容器id 重新进入容器 用exit退出的话会导致容器停止
- docker cp 容器id:/home/1.txt /home 把容器里的1.txt文件复制到主机home文件夹下
- docker export 容器id > aa.tar 把容器打包tar文件到主机当前目录
- cat aa.tar | docker import - name/ubuntu:2.4 把打包的容器恢复成功镜像
- docker commit -m = "提交的描述信息" -a="作者" 容器id 要创建的镜像名称:[标签名] 提交容器使之为新的镜像
- docker commit -m="vim" -a="ghw" 41d41b8a2d29 myname/ubuntu:3.0
8.docker网络
docker安装后,会自动创建3个网络,可以使用以下命令查看,默认采用bridge桥接网络
docker network ls

ip addr

- docker安装成功后会出现docker0的网络设备,本质是一个虚拟网桥
#没有安装可以执行安装
yum install bridge-utils -y
#查看
brctl show
- 运行的容器会创建自己的虚拟的网卡

docker0的作用:
- 给容器分配IP地址(与docker0同网段)
- 给容器分配Mac地址
- 是每个容器的默认网关
- 同一个宿主机的各个容器之间通信基础(都接入docker0网桥)宿主机和容器之间通信的基础
容器与容器之间的互连:
默认情况下,docker容器之间都是通过ip可以互相联通的
基于安全考虑,通过 vim /etc/docker/daemon.json 在末尾添加配置:
#禁止容器执行网络连接(但此配置不对--link 生效)
"icc":false
#重启docker
service docker restart
通过docker run --link 容器名:别名,直接修改容器hosts映射
自定义网络:
为何需要自定义网络
容器的隔离,提高安全性;DNS解析和服务发现;容器与外网的连接;容器之间的负载均衡
创建自定义网络
# --driver代表驱动类型,默认bridge
# --subnet代表网段设置,默认docker0地址上递增
# 通过 docker network ls 查看自定义网络
# 通过 dicker network inspect 查看使用本网络的详情
docker network create [--driver 驱动类型] [--subnet=192.168.1.1/24] 自定义网络名
使用自定义网络
#容器启动时
docker run --network 自定义网络名称
#容器启动后
docker network connect 自定义网络名称
删除自定义网络
docker network rm 网络名
9.本地镜像发布到私有库
- 下载镜像Docker Registry
docker pull registry

- 运行私有库Registry,相当于本地有个私有Docker hub
docker run -d -p 5000:5000 -v /home/registry/:/tmp/registry --privileged=true registry


- 模拟发送一个请求,看有没有上传过镜像
curl -XGET http://124.xxx.57.252:5000/v2/_catalog

- 将新镜像修改成符合私服规范的Tag
docker tag 镜像:Tag Host:Port/Repository:Tag
docker tag myname/ubuntu:3.0 124.xxx.57.252:5000/myname/ubuntu:3.0

- 修改配置文件使之支持http
cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://vn8qybfk.mirror.aliyuncs.com"],
#安全注册你的ip地址
"insecure- registries":["124.xxx.57.252:5000"]
}
#重启docker
systemctl restart docker
#重新运行
docker run -d -p 5000:5000 -v /home/registry/:/tmp/registry --privileged=true registry
- push推送到私服库
docker push 124.xxx.57.252:5000/myname/ubuntu:3.0


- pull拉取到私服库
docker pull 124.xxx.57.252:5000/myname/ubuntu:3.0

9.容器数据卷
卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不屈于联合文件系统,因此能够绕过Union File System提供些用于持续存储或共享数据的特性:
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷
- --privileged=true 解决挂载主机目录访问如果出现cannot open directory :Permission denied
- docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名
例如:
docker run -d -p 5000:5000 -v /home/registry/:/tmp/registry --privileged=true registry
-v 添加自定义的容器卷
/home/registry/ 主机的路径
/tmp/registry 容器内的路径
--privileged=true 放开权限

- docker inspect 容器id 查看容器的内部细节


- docker run -it --privileged=true --volumes-from父类--name u2 ubuntu 容器2继承容器1的卷规则
- docker run -it --privileged=true --volumes-from u1 --name u2 ubuntu

10.DockerFile
dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本
常用的保留字指令
- FROM 基础镜像,当前镜像来源于哪里,指定已存在的模版镜像
- MAINTAINER 镜像维护者的姓名和邮箱地址
- RUN 容器构建时需要运行的命令 两种格式 shell格式 exec格式 run是在docker build时运行
- ADD|COPY 将本地文件添加到镜像中(ADD能自动解压拷贝的压缩包、还能直接请求下载URL)
- WORKDIR 设置当前工作目录
- VOLUME 创建数据卷挂载点
- EXPOSE 声明运行容器时监听的端口
- ENV 设置环境变量
- CMD 容器启动时默认执行的命令(会被运行的command覆盖)
- ENTRYPOINT 容器启动时运行的启动命令(不会被运行的command覆盖)
- USER。用户和用户组
- ARG 指定构建参数
- LABEL 自定义标签
构建镜像命令
- docker build -f Dockerfile -t myname:TAG . -f 要构建的dockerfile文件当前目录可以省略 -t 构建镜像的名字 TAG标签 . 点表示当前目录
11.Docker-Compose
Docker-Compose,是Docker中用于定义和运行多容器应用程序的工具通过compose可以使用一个YML文件来配置应用程序需要的所有服务通过使用一个命令,就可以从YML文件中创建并启动所有服务
- 编写docker-compose.yml构成应用程序的服务
- 执行docker-compose up命令来启动运行整个应用程序
安装:
11.1 Mac操作系统、windows操作系统
Mac和Windows操作系统的Docker Desktop和Docker Toolbox已经包括compose和其他Docker应用程序,用户不需要单独安装
11.2 Linux操作系统
#安装Docker引擎时附带docker-compose插件
sudo yum install -y docker-ce docker-ce-cli \
containerd.io docker-buildx-plugin docker-compose-plugin
#安装Docker引擎后补充安装docker-compose插件
sudo yum install -y docker-compose-plugin
#查看版本号
docker-compose version
11.3 docker-compose.yml文件
- version 定义docker-compose.yml文件的格式版本 (已过时)
- name 定义应用程序使用的名字
- services 定义应用程序所需的服务集合
service:
mysql:
#mysql服务配置项
redis:
#redis服务配置项
- networks 定义应用程序使用的网络
networks:
net1: #网络名称为:应用程序名_net1
driver:bridge #默认bridge网络模式
net2:
- images 服务所使用的本地镜像名称
- container_name 服务所使用的容器名字
- ports 服务所使用的端口映射
ports:
- "8080:8080"
- "80:80"
- volumes 服务所使用的数据卷
volumes:
- /宿主机路径:/容器路径
- environment 服务所使用的环境变量
environment:
- MYSQL_ROOT_PASSWORD=123456
- env_file 服务所使用的环境变量
env_file:
- .mysql_env #与ym1文件同路径下的 .mysql_env
- expose 服务对外暴露的端口
expose:
- "3306"
- build 服务所使用的自定义镜像
build:
context:./db #指定Dockerfile使用的上下文目录
dockerfile:appdb #指定context路径下的dockerfile文件名,若使用默认名字则无需指定改项
#自定义镜像的名字=应用程序名-服务名
- depends_on 指定本服务所依赖的其他服务,应确保先启动所依赖的服务,后启动当前的服务
depends_on:
- 依赖的服务名
- command 指定本服务启动后的默认命令
command:["java","-jar","myapp.jar"]
11.4 docker-compose命令
- docker compose config 验证和显示由 docker-compose.yml 文件定义的服务配置
- docker compose up [-d] 启动应用程序所需的所有服务。-d代表后台运行
- docker compose ps 查看已经启动的容器
- docker compose stop | kill [容器名称] 停止已经启动的容器
- docker compose start | restart [容器名称] 启动被停止的容器(重启容器)
- docker compose exec 容器名 bash 进入容器
- docker compose logs [-f] 查看服务日志。-f代表输出实时日志信息
- docker compose down 用于停止和移除由 docker-compose up 创建的容器、网络和卷
12.虚悬镜像
虚悬镜像执行docker images 出现既没有仓库名也没有标签,在dockerfile构建执行 docker build . 没有加-t 会出现虚悬镜像,虚悬镜像就是错乱的,出现的话直接删除就可以了

- docker images ls -f dangling=true 查询当前有的虚悬镜像
- docker images prune 删除所有的虚悬镜像
13.Docker可视化工具的使用
Portainer是一款docker容器管理平台,提供可视化的UI管理工具;Portainer由G0语言编写,占用资源少(轻量级),支持单机和集群的Docker环境
官网地址:https://www.portainer.io/
文档地址:https://docs.portainer.io/start/install-ce/server/docker/linux
#安装
docker pull portainer/portainer-ce:latest
#创建数据卷
#说明:创建命名数据卷 portainer_data, 保存路径/var/lib/docker/volimes/portainer_data/data
docker volume create portainer_data
#运行
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
执行后访问:https://ip:9443 注意点是这里用的https安装的要加s
创建用户就可以使用了


被折叠的 条评论
为什么被折叠?



