Docker基础

1 Docker概述

我们开发的代码会接触到不同环境:开发环境、测试环境以及生产环境:

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

1.3 docker架构

  • 镜像(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

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

2.2 Docker 镜像相关命令

菜鸟教程之docker命令

2.2.1 查看镜像

# 查看本地所有的镜像
docker imagesdocker images -q # 查看所用镜像的id
  • 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 镜像名称(:版本号)

2.2.4 删除镜像

# 删除指定本地镜像
docker rmi 镜像id # 删除所有本地镜像
docker rmi docker images -q

2.3 容器相关的命令

2.3.1 查看容器

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

2.3.2 创建并启动容器

docker run 参数

参数说明:

  • -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

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

#创建并启动守护式容器  -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

2.3.3 进入容器

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

2.3.4 停止容器

docker stop 容器名称或者容器id

2.3.5 启动容器

docker start 容器名称或者容器id

2.3.6 删除容器

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

#删除指定容器
docker rm 容器名称或者容器id# 删除所有容器:
docker rm docker ps -a -q

2.3.7 查看容器信息

docker inspect 容器名称或者容器id


ps:
容器之间在一个局域网内,linux宿主机器可以与容器进行通信;但是外部的物理机笔记本是不能与容器直接通信的,如果需要则需要通过宿主机器端口的代理.

3 Docker容器的数据卷

3.1 数据卷概念

  • 数据卷是宿主机中的一个目录或文件
  • 当容器目录和数据卷目录绑定后,对方的修改会立即同步
  • 一个数据卷可以被多个容器同时挂载
  • 一个容器也可以被挂载多个数据卷

    作用:
  • 容器数据持久化
  • 外部机器和容器间接通信
  • 容器之间数据交换

3.2 配置数据卷

创建启动容器时,使用 –v 参数 设置数据卷

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

注意事项:

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


同时我们我们回到宿主机中,可以在data文件夹下创建一个文件cf.txt ,可以发现在容器中也会生成cf.txt文件.

总结:

  • 数据卷的持久化:

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

3.3 配置数据卷容器

多容器进行数据交换

  • 多个容器挂载同一个数据卷
  • 数据卷容器

    步骤:
  • 创建启动c3数据卷容器,使用 –v 参数 设置数据卷
docker run –it --name=c3 –v /volume centos:7 /bin/bash
  • 创建启动 c1 c2 容器,使用 --volumes-from 参数 设置数据卷
docker run –it --name=c1 --volumes-from c3 centos:7 /bin/bashdocker run –it --name=c2 --volumes-from c3 centos:7 /bin/bash

总结:

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

4. 应用部署

4.1 MySQL部署

步骤:
1 搜索mysql镜像

docker search mysql

2 拉取mysql镜像

docker pull mysql:5.6

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

# 在/root目录下创建mysql目录用于存储mysql数据信息
mkdir ~/mysql
cd ~/mysql
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

参数说明:

  • -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

docker exec –it c_mysql /bin/bash

5 使用客户端连接数据库

4.2 Tomcat部署

步骤:
1 搜索tomcat镜像

docker search tomcat

2 拉取tomcat镜像

docker pull tomcat

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

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

参数说明:

  • -p 8080:8080: 将容器的8080端口映射到主机的8080端口

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

4 在主机中/tomcat目录中上传一个html页面,使用外部机器访问tomcat

4.3 Redis部署

步骤:
1 搜索redis镜像

docker search redis

2 拉取redis镜像

docker pull redis:5.0

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

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

4 连接redis数据库

  • 使用client连接
./redis-cli.exe -h 192.168.149.135 -p 6379
  • 使用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.

5.2 镜像制作

5.2.1 容器转为镜像

1 使用docker commit命令可以将容器保存为镜像
命令形式:docker commit 容器名称 镜像名称

docker commit 381827f60f70 my_tomcat:1.0

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

docker save -o my_tomcat.tar my_tomcat:1.0

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

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

5.3 Dockerfile 概念

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

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

5.4 Dockerfile 入门案例

案例1

  • 自定义centos7镜像

    • 默认登录路径为 /usr
    • 可以使用vim

实现步骤:
① 定义父镜像:FROM centos:7
② 定义作者信息:MAINTAINER itheima Michael@gmail.com
③ 执行安装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 <Michael@gmail.com>RUN yum install -y vim
WORKDIR /usr
CMD /bin/bash# 保存 退出

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

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

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

实现步骤:
实现步骤
① 定义父镜像:FROM java:8
② 定义作者信息:MAINTAINER itheima Michael@gmail.com
③ 将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 <Michael@gmail.com>ADD springboot.jar app.jar
CMD java–jar app.jar# 保存 退出

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

docker build -f ./java8_dockerfile -t app .

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

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

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

三、 从私有仓库拉取镜像

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

Linux中Docker入门知识相关推荐

  1. Linux中Docker入门知识基础

    Linux中Docker入门知识docker基础 1 Docker概述 我们开发的代码会接触到不同环境:开发环境.测试环境以及生产环境: 1.1 Docker概述 Docker 是一个开源的应用容器引 ...

  2. Linux中Docker的介绍、安装与卸载

    1.介绍 Docker是一个开源的应用容器引擎,诞生于2013年初,基于Go语言实现,dotCloud公司出品(后改名为Docker Inc).Docker可以让开发者打包他们的应用以及依赖包到一个轻 ...

  3. 【Linux】Docker入门

    文章目录 Docker 入门篇 一.初始容器 1.Docker 的安装 1.1 启动容器 1.2 验证容器是否安装成功 2.Docker 的使用 2.1 查看容器 2.2 拉取镜像 2.3 查看镜像 ...

  4. linux中_Linux基础知识(Linux系统、Linux中的链表)

    Linux系统简介 Linux系统的结构及特点 Linux系统的结构图如下图所示: 从上图可以看出,Linux是一个典型的宏内核(一体化内核)结构.硬件系统上面时硬件抽象层,在硬件抽象层上面时内核服务 ...

  5. linux中vi基础知识,Vim入门基础知识集锦

    想学习Vim,但是Vim官网的手册又太大而全,而网上各方资料要么不全面,要么不够基础.在网上搜集各方资料,按照自己的框架整理一份Vim入门基础教程,分享出来.特点是偏向基础,但对入门者来说足够全面,而 ...

  6. 关于 Linux中Git等知识的一些笔记

    写在前面 嗯,Git一般都用平台上的,自己用Githup,Gitee,公司用的Gitlab,服务端的没搞过,基本用的都是客户端. 之前实习分了一个项目做组长,所以自己在阿里云上面搭了SVN的服务端,折 ...

  7. linux中iptables入门教程--设置静态防火墙

    1.iptables介绍 iptables是复杂的,它集成到linux内核中.用户通过iptables,可以对进出你的计算机的数据包进行过滤.通过iptables命令设置你的规则,来把守你的计算机网络 ...

  8. 在linux中docker安装mysql_Linux系统:用docker安装mysql。

    Docker的镜像仓库:https://hub.docker.com/ 1.在Docker的镜像仓库 下载mysql 指定版本下载, 本人选择的版本 5.7mysql5.7下载完成 检查docker当 ...

  9. Linux中Docker部署Redis

    应用背景:在Docker容器中部署Redis,并通过外部机器访问Redis 第一步:搜索Redis镜像 docker search redis 第二步:拉取Redis镜像 docker pull re ...

最新文章

  1. python 装饰器 参数-[Python]写个带参数的装饰器
  2. CSS选取第n个元素 :nth-child()
  3. 音视频技术开发周刊 81期
  4. 【CodeForces - 289E 】Polo the Penguin and XOR operation (数学,异或,贪心)
  5. 2021四川高考成绩等位分查询,四川省教育考试院:2021年四川高考成绩查询入口、查分系统...
  6. Qt5_当前exe所在路径
  7. idea拉出Output窗口和还原窗口
  8. 威纶触摸屏与S7-200SMART PLC通信的参数设置和连接电缆
  9. 红外遥控器解码串口输出模块结合51单片机+oled屏幕实现遥控器红外解锁( STC89C52RC)
  10. 程序员脱离苦海就靠这些绝招了了了。。。
  11. phpstudy升级mysql5.6_phpstudy升级mysql数据库
  12. 项目ITP(一) 二维码
  13. 天龙八部服务器端 修改缥缈峰副本,[专题]聚焦缥缈峰全局攻略
  14. 33暴力破解(MD5撞击)
  15. python调用函数库_python调用操作系统的库函数
  16. asp长度为4的随机数字写
  17. 工信部:将实施国家软件重大工程解决关键软件“卡脖子”问题丨权威发布
  18. vue2.0 使用xlsx读取excel文件数据 操作流程 以及文件中特殊日期数据的处理
  19. STM32学习笔记(三)——外部中断的使用
  20. c语言while怎么读,while( getchar() != ''\n) continue;这个循环读怎么取首字符

热门文章

  1. linux中如何查看mac地址
  2. 还在用Evernote或印象笔记吗?来看看笔记神器Notion吧!
  3. 美国空运专线 美国空运专线时效多久
  4. sap清账使用反记账_SAP反记账功能祥解
  5. From Word Embeddings To Document Distances论文总结
  6. c语言作业 身高预测,C语言的那些题(三) —— 编程计算身高问题
  7. python dict的get函数
  8. 单机传奇架设教程-传奇联机助手一键自动架设
  9. 快手涨收近95港币,年初至今已涨超30%
  10. 全程软件测试:非功能性需求