Docker基础入门-01
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
可以让开发者打包应用以及依赖包到一个轻量级、可移植的容器中,然后发布到其他Linux系统上,以实现虚拟化。
优点:
- 快速、一致地交付应用(避免在我的电脑上能运行,你那怎么就报错的情况发生)
- 响应式部署和扩展
- 在同一硬件上运行更多工作负载
Docker 官网:https://www.docker.com
GitHub Docker 源码:https://github.com/docker/docker-ce
架构
概念
Docker
包括三个基本概念:
镜像(Image): Docker镜像(Image)相当于一个root文件系统
容器(Container): 容器相当于镜像的一个实例,类比面向对象程序中的类和对象一样,镜像是静态的定义,容器是镜像的一个实例。实例(容器)可以被创建、启动、停止、删除。
仓库(Repository): 类似于代码仓库git,用于保存镜像
Docker | OOP |
---|---|
Container | Object |
Images | Class |
结构
概念 | 说明 |
---|---|
Images | Docker Images是创建容器的模板 |
Container | 容器是镜像运行的一个实体。 |
Client | 客户端通过命令行工具或Desktop等与Docker通信 |
Host | 宿主(服务器),用于执行Docker守护进程和容器 |
Registry | 镜像仓库,public/private 仓库 |
Machine | 命令行工具 |
安装
环境:Centos7.9
1 | uname -a # 查看机器信息 3.8以上 |
卸载旧版本
可以先检查是否安装过旧版本的Docker
,如果安装过则需要先卸载依赖项。
1 | sudo yum remove docker \ |
配置仓库
安装yum-utils
包
1 | sudo yum install -y yum-utils |
设置仓库:
官方源:
1
2
3sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo阿里云:
1
2
3sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
这里我们使用阿里云的仓库,国内访问比较快。
Docker引擎
安装Docker Engine
:
1 | sudo yum install docker-ce docker-ce-cli containerd.io |
启动Docker
:
1 | systemctl start docker # 启动 |
配置自启动
1 | sudo systemctl enable docker.service |
禁用则使用disable
检查是否安装成功:
1 | [root@local yum.repos.d]# docker -v |
卸载
卸载Docker Engine、CLI和Containerd包:
1
sudo yum remove docker-ce docker-ce-cli containerd.io
删除所有镜像、容器和卷
1
2sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
镜像加速
国内从Docker Hub
拉取镜像可能会比较慢,推荐配置国内的镜像加速器
获取个人阿里镜像加速器:
找到容器镜像服务
镜像工具 => 镜像加速器
配置镜像加速器
修改daemon配置文件/etc/docker/daemon.json
1 | vi /etc/docker/daemon.json |
检查是否生效
1 | docker info |
Docker容器使用
1 | [root@local ~]# docker |
使用 docker [cammand] --help
查看命令使用方法
1 | docker run --help |
获取镜像
从镜像仓库拉取镜像
命令:docker pull [OPTIONS] NAME[:TAG|@DIGEST]
1 | docker pull -q nginx # -q 不输出 |
启动容器
启动一个新的容器实例
命令:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
1 | docker run --name my_nginx -p 80:80 -d nginx |
- –name:指定容器的名称
- -p:映射的端口
- -d : 后台运行
浏览器访问我们的容器,可以看到nginx
已经启动。
查看所有容器
命令:docker ps [OPTIONS]
1 | docker ps -a |
启动容器
命令:docker start [OPTIONS] CONTAINER [CONTAINER...]
1 | docker start my_nginx |
停止容器
1 | docker stop my_nginx # 停止名称为my_nginx的容器 |
1 | [root@local ~]# docker stop --help |
进入容器
在正在运行的容器中运行命令
命令:docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
1 | docker exec -it my_nginx /bin/bash |
相当于进入容器内部,一个隔离的Linux
系统,使用exit
退出
导入导出
导出
导出容器镜像文件
命令:docker export [OPTIONS] CONTAINER
1 | docker export my_nginx > my_nginx.tar |
导入
导入镜像
命令:docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
这里我将导出的镜像文件放到win
系统中,使用Docker Desktop
导入
1 | docker import .\my_nginx.tar my_nginx |
删除容器
命令:docker rm [OPTIONS] CONTAINER [CONTAINER...]
1 | docekr rm my_nginx |
可选参数:
- -f : 强制删除正在运行的容器(不加这个参数则需要先
docker stop containerId
) - -v : 移除与容器相关的数据卷
查看日志
命令: docker logs [OPTIONS] CONTAINER
1 | docker logs -f -n 100 my_nginx |
- -f : 跟踪日志输出
- -n : 从日志末尾显示的行数(默认:全部)
查看端口
1 | [root@local ~]# docker port my_nginx |
Docker 镜像使用
使用docker run
运行容器时,如果在本地没有找到镜像则会自动从Docker Hub
拉取镜像。
查看镜像列表
1 | [root@local ~]# docker images |
- REPOSITORY : 镜像仓库源(默认:Docker Hub)
- TAG :镜像标签 默认拉取latest,可指定版本
docker pull nginx:xxx
- IMAGE ID : 镜像ID
- CREATED : 创建时间
- SIZE : 镜像大小
查找镜像
命令: docker search [OPTIONS] TERM
1 | docker search --limit 10 nginx # 返回10条结果 |
- NAME : 镜像仓库源名称
- DESCRIPTION : 描述
- STARS : 点赞数
- OFFICIAL : 是否官方发布
- AUTOMATED : 自动构建
拉取镜像
命令:docker pull [OPTIONS] NAME[:TAG|@DIGEST]
1 | docker pull nginx # 拉取默认版本 |
1 | [root@local ~]# docker pull nginx |
删除镜像
命令: docker rmi [OPTIONS] IMAGE [IMAGE...]
1 | docker rmi hello-world:latest |
构建镜像
命令:docker build [OPTIONS] PATH | URL | -
设置镜像标签
命令: docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
1 | docker tag nginx:latest jontymin/my_nginx |
镜像仓库
仓库(Repository)是集中存放镜像的地方(类比git仓库)
Docker
官方维护了一个公共仓库,需要注册账号以推送镜像 https://hub.docker.com/
上图为Docker容器和本地仓库、远程仓库的关系
登录
1 | docker login |
- -p : 密码
- -u : 用户名
1 | [root@local ~]# docker login |
推送镜像
命令 : docker push [OPTIONS] NAME[:TAG]
1 | docker push jontymax/my_nginx |