Linux中Docker入门知识基础

Linux中Docker入门知识docker基础

1 Docker概述

我们开发的代码会接触到不同环境:开发环境、测试环境以及生产环境:
Linux中Docker入门知识基础_第1张图片

1.1 Docker概述

  • Docker 是一个开源的应用容器引擎
  • Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上
  • 容器是完全使用沙箱机制,相互隔离
  • 容器性能开销极低

1.2 docker安装

本示例基于CentOS 7 安装演示 Docker官网

1.2.1 docker安装步骤
# 1、yum 包更新到最新 
yum update
# 2、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的 
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3、 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 4、 安装docker,出现输入的界面都按 y 
yum install -y docker-ce
# 5、 查看docker版本,验证是否验证成功
docker -v
12345678910
1.3 docker架构

Linux中Docker入门知识基础_第2张图片

  • 镜像(Image): Docker 镜像(Image),就相当于是 一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统.
  • 容器(Container):镜像(Image)和容器(Contain er)的关系,就像是面向对象程序设计中的类和对象一 样,镜像是静态的定义,容器是镜像运行时的实体。容 器可以被创建、启动、停止、删除、暂停等.
  • 仓库(Repository):仓库可看成一个代码控制中心, 用来保存镜像.
1.4 配置 Docker 镜像加速器

1 默认情况下,将来从docker hub(https://hub.docker.com/)上下载 docker镜像,速度太慢.

  • USTC:中科大镜像加速器(https://docker.mirrors.ustc.edu.cn)
  • 阿里云 : (https://www.aliyun.com/)

2 查看文件/etc/docker/daemon.json

# 执行如下命令: 
cat /etc/docker/daemon.json
12

2 Docker命令

2.1 进程相关命令

# qido启动docker服务
systemctl start docker

# 停止docker服务
systemctl stop docker

# 重启docker服务
systemctl restart docker

# 查看docker服务状态
systemctl status docker

# 开机启动docker服务
systemctl enable docker

123456789101112131415

2.2 Docker 镜像相关命令

菜鸟教程之docker命令

2.2.1 查看镜像

# 查看本地所有的镜像
docker images

docker images -q # 查看所用镜像的id
1234
  • REPOSITORY:镜像名称
  • TAG:镜像标签
  • IMAGE ID:镜像ID
  • CREATED:镜像的创建日期
  • SIZE:镜像大小

2.2.2 搜索镜像

docker search 镜像名称
  • NAME:镜像名称
  • DESCRIPTION:镜像描述
  • STARS:用户评价,反应一个镜像的受欢迎程度
  • OFFICIAL:是否官方
  • AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的

2.2.3 拉取镜像

# ()可选 如果不指定版本号,默认下载最新版本,可去docker hub查询镜像版本
docker pull 镜像名称(:版本号)
12

2.2.4 删除镜像

# 删除指定本地镜像
docker rmi 镜像id 

# 删除所有本地镜像
docker rmi docker images -q
12345

2.3 容器相关的命令

2.3.1 查看容器

docker ps # 查看正在运行的容器
docker ps –a # 查看所有容器,包括正在运行和停止的容器
12

2.3.2 创建并启动容器

docker run 参数
1

参数说明:

  • -i:保持容器运行。通常与 -t 同时使用。加入it这两个参数后,容器创建后自动进入容器中,退出容器后,容器自动关闭
  • -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用
  • -d:以守护(后台)模式运行容器。创建一个容器在后台运行,需要使用docker exec 进入容器。退出后,容器不会关闭
  • -it 创建的容器一般称为交互式容器,-id 创建的容器一般称为守护式容器
  • --name:为创建的容器命名
1 交互式容器:

交互式方式创建并启动容器,启动完成后,直接进入当前容器。使用exit命令退出容器。需要注意的是以此种方式 启动容器,如果退出容器,则容器会进入停止状态.

#创建并启动名称为 mycentos7 的交互式容器;
# 下面指令中的镜像名称 centos:7 也可以使用镜像id 
# 使用的shell是/bin/bash
docker run -it --name=mycentos7 centos:7 /bin/bash
1234
守护式容器:

创建一个守护式容器;如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器.

#创建并启动守护式容器  -id和di相等
docker run -di --name=mycentos2 centos:7

#登录进入容器命令为:docker exec -it container_name (或者 container_id) /bin/bash(exit退出 时,容器不会停止)
docker exec -it mycentos2 /bin/bash
12345

2.3.3 进入容器

# docker exec -it container_name (或者 container_id) /bin/bash
#(exit退出 时,容器不会停止)
docker exec 参数 
# eg: 
docker exec -it mycentos2 /bin/bash
12345

2.3.4 停止容器

docker stop 容器名称或者容器id
1

2.3.5 启动容器

docker start 容器名称或者容器id
1```

### 2.3.6 删除容器
**注意:如果容器是运行状态则删除失败,需要停止容器才能删除**

```bash
#删除指定容器
docker rm 容器名称或者容器id

# 删除所有容器:
docker rm docker ps -a -q
12345

2.3.7 查看容器信息

docker inspect 容器名称或者容器id
1```
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200910101705934.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FCZXN0Um9va2ll,size_16,color_FFFFFF,t_70#pic_center)
ps:
容器之间在一个局域网内,linux宿主机器可以与容器进行通信;但是外部的物理机笔记本是不能与容器直接通信的,如果需要则需要通过宿主机器端口的代理.
#  Docker容器的数据卷

## 3.1 数据卷概念
- 数据卷是宿主机中的一个目录或文件
- 当容器目录和数据卷目录绑定后,对方的修改会立即同步
- 一个数据卷可以被多个容器同时挂载
- 一个容器也可以被挂载多个数据卷![在这里插入图片描述](https://img-blog.csdnimg.cn/20200910101938570.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FCZXN0Um9va2ll,size_16,color_FFFFFF,t_70#pic_center)
- - **作用:**
- 容器数据持久化
- 外部机器和容器间接通信
- 容器之间数据交换
##  3.2 配置数据卷
**创建启动容器时,使用 –v 参数 设置数据卷**

```bash
docker run ... –v 宿主机目录(文件):容器内目录(文件) ...
1

注意事项:

  • 目录必须是绝对路径
  • 如果目录不存在,会自动创建
  • 一个容器可以挂载多个数据卷
  • 一个数据卷也可以被多个容器挂载
  • 两个容器可以挂载同一个容器
# 如将容器的/root/data_container目录挂载到宿主机的/root/data目录 
docker run -it --name=cl -v /root/data:/root/data_container centos /bin/bash
12

总结:

  • 数据卷的持久化:
    • 当我们把c1容器删除后,宿主机中的数据卷依然存在。 所以当我们重新创建一个容器的同时依然可以挂载宿主机中的data文件夹,对应data里的数据依然同步到容器中.
  • 一个容器可以挂载多个数据卷:
  • 多个容器可以挂载同一个数据卷:
    • 分别创建两个容器,两个容器都挂载宿主机中data目录,当 修改c3容器的data目录c4会实现同步,从而实现两个容器之间的交互.Linux中Docker入门知识基础_第3张图片

3.3 配置数据卷容器

多容器进行数据交换

  • 多个容器挂载同一个数据卷
  • 数据卷容器
  • Linux中Docker入门知识基础_第4张图片
  • 步骤:
  • 创建启动c3数据卷容器,使用 –v 参数 设置数据卷
docker run –it --name=c3 –v /volume centos:7 /bin/bash
1

创建启动 c1 c2 容器,使用 --volumes-from 参数 设置数据卷

docker run –it --name=c1 --volumes-from c3 centos:7 /bin/bash

docker run –it --name=c2 --volumes-from c3 centos:7 /bin/bash
123

总结:

  • 数据卷: 宿主机的一个目录或文件
  • 数据卷作用:
    • 容器数据持久化
    • 客户端和容器数据交换
    • 容器间数据交换
  • 数据卷容器
    • 创建一个容器,挂载一个目录,让其他容器继承自该容器( --volume-from )

应用部署

4.1 MySQL部署

步骤:
1 搜索mysql镜像

docker search mysql
1

2 拉取mysql镜像

docker pull mysql:5.6
1

3 创建容器,设置端口映射、目录映射

# 在/root目录下创建mysql目录用于存储mysql数据信息
mkdir ~/mysql
cd ~/mysql
123
docker run -id \
-p 3307:3306 \
--name=c_mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.6
12345678```

**参数说明:**

- **-p 3307:3306**:将容器的 3306 端口映射到宿主机的 3307 端口。
- **-v $PWD/conf:/etc/mysql/conf.d**:将主机当前目录下的 conf/my.cnf 挂载到容器的 /etc/mysql/my.cnf (配置目录)
- **-v $PWD/logs:/logs**:将主机当前目录下的 logs 目录挂载到容器的 /logs.(日志目录)
- **-v $PWD/data:/var/lib/mysql** :将主机当前目录下的data目录挂载到容器的 /var/lib/mysql .(数据目录)
- **-e MYSQL_ROOT_PASSWORD=root:**初始化 root 用户的密码

4 进入容器,操作mysql

```bash
docker exec –it c_mysql bash
1

5 使用客户端连接数据库

Linux中Docker入门知识基础_第5张图片

4.2 Tomcat部署

步骤:
1 搜索tomcat镜像

docker search tomcat
1

2 拉取tomcat镜像

docker pull tomcat
1

3 创建容器,设置端口映射、目录映射

# 在/root目录下创建tomcat目录用于存储tomcat数据信息
mkdir ~/tomcat
cd ~/tomcat
123
docker run -id --name=c_tomcat \
-p 8080:8080 \
-v $PWD:/usr/local/tomcat/webapps \
tomcat 
1234

参数说明:

  • -p 8080:8080: 将容器的8080端口映射到主机的8080端口
  • -v $PWD:/usr/local/tomcat/webapps: 将主机中当前目录挂载到容器的webapps

4 在主机中/tomcat目录中上传一个html页面,使用外部机器访问tomcat
Linux中Docker入门知识基础_第6张图片

4.3 Redis部署

步骤:
1 搜索redis镜像

docker search redis

2 拉取redis镜像

 docker pull redis:5.01

3 创建容器,设置端口映射

docker run -id --name=c_redis -p 6379:6379 redis:5.0
1

4 连接redis数据库

  • 使用client连接
./redis-cli.exe -h 192.168.149.135 -p 6379
1

使用redis桌面客户端连接

5. Docerfile

5.1 Docker 镜像原理

引入问题:
Q1: Docker 镜像本质是什么?
A1:是一个分层文件系统.

Q2:Docker 中一个centos镜像为什么只有200MB,而一个centos操作系统的iso文件要几个个G?
A2:Centos的iso镜像文件包含bootfs和rootfs,而docker的centos镜像复用操作系统的bootfs,只有rootfs和其他镜像层.

Q3:Docker 中一个tomcat镜像为什么有500MB,而一个tomcat安装包只有70多MB?
A3:由于docker中镜像是分层的,tomcat虽然只有70多MB,但他需要依赖于父镜像和基础镜像,所有整个对外暴露的tomcat镜像大小500多MB.
Linux中Docker入门知识基础_第7张图片Linux中Docker入门知识基础_第8张图片

5.2 镜像制作

5.2.1 容器转为镜像

Linux中Docker入门知识基础_第9张图片
1 使用docker commit命令可以将容器保存为镜像
命令形式:docker commit 容器名称 镜像名称

docker commit 381827f60f70 my_tomcat:1.0
1

2 使用docker save命令可以将已有镜像保存为tar 文件
命令形式:docker save –o tar文件名 镜像名

docker save -o my_tomcat.tar my_tomcat:1.0
1

3 使用docker load命令可以根据tar文件恢复为docker镜像
命令形式:docker load -i tar文件名

# 加载恢复镜像
docker load -i my_tomcat.tar 
# 在镜像恢复之后,基于该镜像再次创建启动容器 
docker run -di --name=new_tomcat -p 8080:8080 my_tomcat:1.0
1234

注意:新的镜像制作后,原本容器中挂载的目录将失效, 索引一般在恢复镜像创建容器容器的时候需要重新挂载。

5.3 Dockerfile 概念

Dockerfile 是一个文本文件,包含了一条条的指令,每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像.

  • 对于开发人员:可以为开发团队提供一个完全一致的开发环境
  • 对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件
    构建一个新的镜像开始工作了
  • 对于运维人员:在部署时,可以实现应用的无缝移植

5.4 Dockerfile 入门案例

案例1

  • 自定义centos7镜像
    • 默认登录路径为 /usr
    • 可以使用vim

实现步骤:
① 定义父镜像:FROM centos:7
② 定义作者信息:MAINTAINER itheima [email protected]
③ 执行安装vim命令: RUN yum install -y vim
④ 定义默认的工作目录:WORKDIR /usr
⑤ 定义容器启动执行的命令:CMD /bin/bash
⑥ 通过dockerfile构建镜像:docker bulid –f dockerfile文件路径 –t 镜像名称:版本
第1步 填写centos_dockerfile文件内容

vim ./centos_dockerfile

# 文件内容
FROM centos:7
MAINTAINER itheima <[email protected]>

RUN yum install -y vim
WORKDIR /usr
CMD /bin/bash

# 保存 退出
1234567891011

第2步 文件编写完成执行命令构建:

docker build -f ./centos_dockerfile -t my_centos:1 .
1

案例2
定义dockerfile,发布springboot项目

实现步骤:
实现步骤
① 定义父镜像:FROM java:8
② 定义作者信息:MAINTAINER itheima [email protected]
③ 将jar包添加到容器: ADD springboot.jar app.jar
④ 定义容器启动执行的命令:CMD java–jar app.jar
⑤ 通过dockerfile构建镜像:docker bulid –f dockerfile文件路径 –t 镜像名称:版本

第1步 填写java8_dockerfile文件内容

vim ./java8_dockerfile

# 文件内容
FROM java:8
MAINTAINER itheima <[email protected]>

ADD springboot.jar app.jar 
CMD java–jar app.jar

# 保存 退出
12345678910

第2步 文件编写完成执行命令构建:

docker build -f ./java8_dockerfile -t app .
1

6. 服务编排

6.1 服务编排概念

微服务架构的应用系统中一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,维护的工作量会很大.

6.2 Docker Compose 概述

Docker Compose是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建 ,启动和停止。使用步骤:
1 利用 Dockerfile 定义运行环境镜像
2 使用 docker-compose.yml 定义组成应用的各服务
3 运行 docker-compose up 启动应用

7. Docker 私有仓库

7.1 Docker 私有仓库

一、私有仓库搭建

# 拉取私有仓库镜像 
docker pull registry

# 启动私有仓库容器 
docker run -id --name=registry -p 5000:5000 registry

# 修改daemon.json 
vim /etc/docker/daemon.json  

# 重启docker 服务 
systemctl restart docker
docker start registry
123456789101112

** 二、将镜像上传至私有仓库**

# 1、标记镜像为私有仓库的镜像     
docker tag centos:7 私有仓库服务器IP:5000/centos:7
 
# 2、上传标记的镜像     
docker push 私有仓库服务器IP:5000/centos:7
12345

三、 从私有仓库拉取镜像

#拉取镜像 
docker pull 私有仓库服务器ip:5000/centos:7

你可能感兴趣的:(docker,linux,容器)