Docker官网地址: https://www.docker.com/
Docker文档地址:https://docs.docker.com/
Docker仓库地址:https://hub.docker.com/
Docker是什么
Docker 容器是一个开源的应用容器引擎,让开发者可以以统一的方式打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何安装了docker引擎的服务器上(包括流行的Linux机器、windows机器),也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架包括系统。
上面说明来源于百度,我的理解是docker通过容器技术使应用之间完全隔离,使应用和环境变的可移值
在docker之前部署应用会因为部署环境的不同出现很多问题,docker通过把环境和引用一起打包发布,简化了部署的过程
Docker安装
官方文档: https://docs.docker.com/engine/install/
以下docker操作已Centos7为例
卸载旧版docker
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安装yum工具包
yum install -y yum-utils
设置镜像仓库(下面使用的是阿里云的镜像仓库)
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新yum软件包
yum makecache fast
安装最新版docker
docker-buildx-plugin docker-compose-plugin插件可以不安装
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
启动docker
systemctl start docker
// 验证是否启动成功
docker version
Docker架构
镜像(image):类似于操作系统的镜像,它包含运行应用程序所需的依赖项、配置、脚本、二进制文件等等。还包含容器的其他配置,例如环境变量、要运行的默认命令和其他元数据。
容器(container):通过镜像运行的沙盒进程,类似于通过操作系统镜像安装的操作系统
仓库(registry):类似于maven仓库,用于存放镜像
守护进程(Docker daemon):docker的主进程,监听客户端请求并管理docker对象
可以看出docker是CS结构的,当客户端运行docker run时,docker服务会先在本地查找运行的镜像,存在直接运行,不存在将从远程仓库拉取相应镜像运行。
Docker初体验-部署nginx
在docker仓库https://hub.docker.com/搜索nginx,选择第一个
查看nginx相关版本
使用docker pull命令拉取nginx镜像
docker pull nginx // 默认拉取laster版本
docker pull nginx:1.23.3 // 拉取指定版本的nginx
使用dcoker images命令查看本地镜像
docker images
在docker仓库镜像详情页查看镜像使用说明
在docker仓库镜像详情页往下翻还有很多关于镜像使用的说明,包括镜像内html文件位置,nginx配置文件位置等。这里只是截取了一小部分
使用docker run命令创建并启动容器
C --name nginx -d -v /home/data/docker/nginx/html:/usr/share/nginx/html -v /home/data/docker/nginx/conf:/etc/nginx -v /home/data/docker/nginx/logs:/var/log/nginx/ -p 808:80 nginx
# 指定容器名称
--name nginx
# 映射本地目录到容器,需要提前在本地conf目录准备好配置文件
-v /home/data/docker/nginx/html:/usr/share/nginx/html
-v /home/data/docker/nginx/conf:/etc/nginx
-v /home/data/docker/nginx/logs:/var/log/nginx
# 指定本地808端口映射到容器80端口
-p 808:80
-v有两种模式
ro
文件:容器内不能修改,会提示read-only
文件夹:容器内不能修改、新增、删除文件夹中的文件,会提示read-only
rw(默认)
文件:不管是宿主机还是容器内修改,都会相互同步;但容器内不允许删除,会提示Device or resource busy;宿主机删除文件,容器内的不会被同步
文件夹:不管是宿主机还是容器内修改、新增、删除文件,都会相互同步
Docker基本命令
可以通过--help命令查看所有命令及使用,或到官方文档查看 https://docs.docker.com/reference/
镜像相关命令
docker images [OPTIONS] [REPOSITORY[:TAG]] 查看本地镜像
-a 查看本地所有镜像(含中间映像层)
-q 只查看镜像id
docker search [OPTIONS] TERM 从远程残酷查找镜像
一般都是到https://hub.docker.com/查找,可以看到镜像更具体的信息
docker pull [OPTIONS] NAME[:TAG|@DIGEST] 从远程仓库拉取镜像
docker rmi [OPTIONS] IMAGE [IMAGE...] 删除本地镜像
-f 强制删除
docker save [OPTIONS] IMAGE [IMAGE...] 保存镜像,一般保存为tar文件
-o 镜像打包后生产的文件
docker load [OPTIONS] 加载一个镜像
-i 要加载的镜像文件
docker rmi $(docker images -aq) 删除所有镜像
容器相关命令
docker ps [OPTIONS] 显示正在运行的容器
-a 显示所有容器(包括未运行)
-q 只显示容器id
docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 根据镜像创建并启动容器
--name 指定容器名称
-d 后台运行容器,并返回容器ID
-it 以交互模式运行容器,并进入容器终端
-p 指定端口映射
-P 随机端口映射
-e 设置环境变量
-m 设置容器使用内存最大值
-v 绑定卷
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|- 拷贝镜像文件到本地
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH 拷贝本地文件到镜像
docker exec [OPTIONS] CONTAINER COMMAND [ARG...] 进入运行容器终端
-it 以交互模式运行容器,并进入容器终端
docker attach [OPTIONS] CONTAINER 连接到正在运行中的容器
docker rm [OPTIONS] CONTAINER [CONTAINER...] 删除容器
-f 强制山粗
docker inspect [OPTIONS] NAME|ID [NAME|ID...] 获取容器/镜像的元数据
docker stats [OPTIONS] [CONTAINER...] 查看容器使用情况,CPU,内存,网络io等
docker start [OPTIONS] CONTAINER [CONTAINER...] 启动容器
docker stop [OPTIONS] CONTAINER [CONTAINER...] 停止容器
docker restart [OPTIONS] CONTAINER [CONTAINER...] 重启容器
docker rm $(docker ps -aq) 删除所有容器