Docker 概述
- Docker 是一个开源的应用容器引擎
- 诞生于 2013 年初,基于 Go 语言实现, dotCloud 公司出品(后改名为Docker Inc)
- Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上。
- 容器是完全使用沙箱机制,相互隔离
- 容器性能开销极低
- Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)
docker架构:
- 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
实验0 基础实验
1.docker安装实验
(1)在本机ubuntu环境中安装docker
系统版本:ubuntu14.04
步骤:
# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
# step 2: 安装GPG证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装 Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce
注:上述命令下载文件时可能会下载不全,根据提示使用修复(--fix)下载,直到下载完全正确。
验证:
wuyi@ubuntu:~$ sudo docker version
[sudo] password for wuyi:
Client:
Version: 18.06.3-ce
API version: 1.38
Go version: go1.10.3
Git commit: d7080c1
Built: Wed Feb 20 02:27:13 2019
OS/Arch: linux/amd64
Experimental: false
Server:
Engine:
Version: 18.06.3-ce
API version: 1.38 (minimum version 1.12)
Go version: go1.10.3
Git commit: d7080c1
Built: Wed Feb 20 02:25:38 2019
OS/Arch: linux/amd64
Experimental: false
wuyi@ubuntu:~$
(2) docker源修改
将docker源配置为阿里云镜像:
- 进入官网:https://dev.aliyun.com/
- 进行注册账户并登录
- 在产品与服务中找到容器镜像服务,点击进入
- 左栏中点击镜像加速器
- 按操作文档进行配置
- 注:ubuntu14.04不支持systemctl,重启docker使用service命令(sudo service docker start)
2.镜像管理实验
(1) 搜索mysql镜像(... search + 关键词 可以用来搜索镜像)
$ sudo docker search ubuntu
(2) 下载搜索列表中的第一项
# 使用这条指令可以下载名为ubuntu的镜像
$ sudo docker pull ubuntu
# 下载 ubuntu的镜像,且指定版本14.04
$ sudo docker pull ubuntu:14.04
# 从指定的镜像源dl.dockerpool.com下载最新的Ubuntu镜像
$ sudo docker pull dl.dockerpool.com:5000/ubuntu
(3) 使用 sudo docker images查看本地镜像
(4) 使用tag命令,依次创建3个本地别名文件
$ sudo docker tag mysql mysql:1
$ sudo docker tag mysql mysql:2
$ sudo docker tag mysql mysql:3
$ sudo docker images
最后查看本地镜像信息,体会REPOSITORY、TAG、IMAGE ID之间的变化
(5)使用rmi命令删除 mysql:1 镜像,再使用 images 查看变化
(6)使用rmi命令删除 mysql 镜像,再使用 images 查看变化
(7)使用rmi命令删除 Image ID ,再使用 images 查看变化
(提示:强制删除加 -f )
# 类似于
$ sudo docker rmi d72169616e20
(8)下载ubuntu镜像,并使用inspect命令查看ubuntu镜像的信息,先查看全部信息,再单独查看DockerVersion信息(提示:sudo docker inspect -f {{".DockerVersion"}} ubuntu:1)
3.容器管理实验
1.体会容器的两种创建并启动方式
第一种 : create + run 运行容器
(1) 使用create命令由ubuntu镜像创建一个容器(注意使用 -it 指令)
(2) 分别使用 sudo docker ps -a 和 sudo docker ps 查看本机容器状态
(3) 使用start相关的命令启动一个容器
(4) 再分别使用 sudo docker ps -a 和 sudo docker ps 查看本机容器状态
第二种:使用run直接运行一个容器
(5) 使用run直接由ubuntu镜像创建一个容器,并使其在后台以守护态运行
$ sudo docker run -idt ubuntu
(6) 再分别使用 sudo docker ps -a 和 sudo docker ps 查看本机容器状态
2.进入处于运行态的容器
(7) 使用 exec 进入刚刚创建的容器
3.关闭处于Up状态(即,启动状态)的容器
(8) 使用stop命令终止一个容器,针对NAME终止其中一个容器,针对CONTAINER ID 终止另一个容器
(9) 再分别使用 sudo docker ps -a 和 sudo docker ps 查看本机容器状态
容器的删除(体会删除运行中容器以及不运行的容器)
(10)先启动一个容器,注意NAMES与STATUS
(11)对于两个不同状态的容器分别执行删除
回答问题:
1. 简要谈谈你对镜像,容器的理解.
答:利用面向对象的思想,镜像相当于一个类,而容器是镜像这个类的实例。
2. do docker run -idt ubuntu 命令中 idt三个字母分别代表的含义.
答:-i:开启stdin
-d:守护方式 daemon 在后台运行 docker container
-t:分配一个伪tty终端
3. sudo docker ps -a 与 sudo docker ps命令的区别?
答:有-a参数表示显示所有的容器,无-a参数只显示启动的容器。
实验1-数据管理实验
- 在容器内创建一个数据卷
- 挂载主机目录或者文件作为数据卷
- 创建数据卷容器
- 在共享数据卷中创建一个文件
- 在其他的容器中查看被刚刚创建的文件
实验问答:
1. 简述 touch 命令的作用
答:touch命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。
2. 简述 ls 命令的作用
答: ls命令用于显示指定工作目录下之内容(列出目前工作目录所含之文件及子目录)。
实验2-网络配置实验
1. 将容器与主机的端口号相绑定(分别使用不同的方法)
2. 实现容器与容器的互联,使用ping命令检验连通性
参考:https://shimo.im/docs/FnT8B0CdmlkiD1mO/read