Docker 概述与应用

目录

  • Docker
    • 1. Docker 背景介绍
    • 2. Docker 架构
    • 3. Docker 安装
      • a. 安装
      • b. 配置镜像加速器
    • 4. Docker 命令(重点)
      • a. 守护进程操作命令
      • b. 镜像命令
      • c. 容器命令
    • 5. Docker 数据卷
      • a. 作用
      • b. 数据卷命令
    • 6. Docker 应用部署(重点)
      • a. MySQL
      • b. Tomcat
      • c. Nginx
      • d. Redis
      • e. Rabbitmq
    • 7. Docker 镜像原理
    • 8. Dockerfile 使用
      • a. 自定义 centos7 镜像
      • b. 定义 Dockerfile 打包 SpringBoot 项目
    • 9. Docker 容器虚拟化与传统虚拟机比较
    • 10. Docker 概念总结


Docker

1. Docker 背景介绍

  • 背景:Docker 的出现是用于解决软件跨环境迁移问题的。
  • 诞生时间:2013
  • 版本:社区版本(CE)和企业版本(EE)

2. Docker 架构

Docker 概述与应用_第1张图片

  • 客户端:接收命令传送至守护进程
  • 守护进程:docker后台进程
    镜像:redis镜像、tomcat镜像、centos:7镜像
    容器:给镜像提供可运行环境,类似于集装箱,特点:沙箱机制,相互隔离
  • 镜像仓库:
    官方仓库:处于外网环境,所以下载比较慢,建议配置镜像加速器
    私有仓库:公司自己搭建(此处不做搭建)

3. Docker 安装

a. 安装

# 1、yum 包更新到最新 yes
yum update -y
# 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

b. 配置镜像加速器

  • 网易云镜像加速器
  • 腾讯云镜像加速器
  • 中科大镜像加速器
  • 阿里云镜像加速器(必须登录阿里云才能分配,默认已配好)
docker info

- Registry Mirrors
  • 阿里云配置:登录阿里云账号,搜索容器镜像服务
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://afi5x6i2.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

需要注意最后两行命令,单独执行一遍,如何查看是否配置成功:docker info

Docker 概述与应用_第2张图片

4. Docker 命令(重点)

a. 守护进程操作命令

1.启动命令
systemctl start docker
2.停止命令
systemctl stop docker
3.重启命令
systemctl restart docker
4.查看状态
systemctl status docker
5.加入开机自启
systemctl enable docker

b. 镜像命令

1.查看本地镜像
docker images 
docker images -q(查看镜像id)
2.查找镜像
docker search xxx(redis)
3.下载镜像
docker pull xxx(redis:5.0) #注意如果不跟版本号,默认下载latest(最新版)。
4.删除镜像
docker rmi xxx(redis:5.0) #注意如果不跟版本号,默认删除latest(最新版)
5.删除所有镜像
docker rmi 'docker images -q'  # 删除所有本地镜像

c. 容器命令

1.创建容器
	交互式容器:(创建后直接进入容器内部,一旦退出容器,容器服务自动停止)
	docker run -it --name=c1 centos:7 /bin/bash
	ll 列表
	cd / 根目录
	cd root/ root(用户)目录
	克隆会话 打开新窗口

	守护式容器:(创建后不会直接进入容器内部,需要使用命令进入容器内部,退出容器,容器服务不会停止)
	docker run -id --name=c2 centos:7

2.删除容器
docker rm 容器名称/容器id(c2) #这里只可以删除已经停止的容器,删除正在运行着的容器会报错
3.查看容器
docker ps #查看正在运行着的容器
docker ps -a #查看所有创建的容器
4.进入容器内部
docker exec -it 容器名称(c2)  /bin/bash
/bin/bash 可以替换为 bash
5.停止容器
docker stop 容器名称/容器id
6.启动容器
docker start 容器名称 (c2) #如果容器原来是交互式容器,那么调用start方法后会自动升级为守护式容器
7.退出容器
exit
8.强制删除
docker rm -f 容器名称 #不建议使用
9.容器开机自启(扩展)
docker run -id --name=c2 --restart=always centos:7

5. Docker 数据卷

a. 作用

  1. 数据持久化
  2. 容器之间数据共享
  3. 使容器间接的完成与外部机器的交互
pwd 查看当前目录
rz 上传窗口(或点击上面最右侧图标)

b. 数据卷命令

docker run -id --name=c1 -v /root/data:/root/c1data centos:7

c1无需先创建,自动新建c1、data目录、c1data目录,c1的c1data下创建的自动保存在Linux数据卷中
cd c1data/
touch t1.txt
vim t2.txt #vim在docker的centos不存在
vi t2.txt
n 输入
esc
:wq 退出
cat t2.txt 查看

-v : 代表挂载数据卷,路径 : 前面代表虚拟机中的路径,必须写绝对路径;: 后面代表容器中的路径,必须写绝对路径。

6. Docker 应用部署(重点)

a. MySQL

#部署命令
docker run -id --name=c_mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
#-e MYSQL_ROOT_PASSWORD 设置root密码
#-p 端口映射

docker exec -it c_mysql bash
mysql -uroot -proot
#mysql相关命令
show databases; #查看数据库
use xxx; #切换数据库
show tables; #查看数据库中的表

b. Tomcat

#部署命令
docker run -id --name=c_tomcat -p 8080:8080 -v /root/tomcat:/usr/local/tomcat/webapps tomcat
#需要在root/tomcat下面创建目录并且创建html才可以看到效果

vim index.html
:wq
mkdir test #创建test目录,webapp下要有目录才能写入
mv index.html test/ #表示要将当前位置的index.html移到test目录中,右边的/有没有都可以,但是cd /root 左边的/一定要有

c. Nginx

#部署命令
docker run -id --name=c_nginx -p 80:80 -v /root/nginx:/usr/share/nginx/html nginx

d. Redis

#部署命令
docker run -id --name=c_redis -p 6379:6379 redis

set a b
get a

docker stop c_redis c_mysql c_nginx c_tomcat c1 c2

e. Rabbitmq

#1.查找带管控台页面插件的rabbitmq镜像
docker search rabbitmq:management
#2.获取镜像
docker pull rabbitmq:management
#3.安装镜像 -d 后台运行容器,并返回容器ID 
#-p 指定端口映射,格式为:主机(宿主)端口:容器端口
#--name 给运行的程序起个名称
docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:management

#查看
docker ps
#开启
docker start rabbitmq
#关闭
docker stop rabbitmq

7. Docker 镜像原理

  • Docker 本质:文件分层管理系统
  • 问题:为什么 tomcat 镜像507M,变大了;而 centos:7 镜像200M,变小了:
    Docker 概述与应用_第3张图片
  • 解答:
    tomcat 不仅仅是一个 tomcat,里面包含了 jdk、rootfs(centos);
    centos 变小是因为复用了 bootfs (基础镜像)。
    Docker 复用了 bootfs 层,只需要在 roofs 层开始修改。

8. Dockerfile 使用

a. 自定义 centos7 镜像

要求:

  1. 指定工作目录 usr
  2. 能够使用vim
  • dockerfile:
FROM centos:7
MAINTAINER regino
RUN yum install -y vim
WORKDIR /usr
CMD /bin/bash
  • 将 dockerfile 打包为本地镜像:
#镜像名称和版本号自己定义,注意命令最后是一个英文的点
docker build -f dockerfile名称 -t 镜像名称:版本号 .

b. 定义 Dockerfile 打包 SpringBoot 项目

  • 步骤:
FROM java:8
MAINTAINER regino
ADD spring-boot-docker-demo.jar app.jar
CMD java -jar app.jar
  • 将 dockerfile 打包为本地镜像:
#镜像名称和版本号自己定义,注意命令最后是一个英文的点
docker build -f dockerfile名称 -t 镜像名称:版本号 .

9. Docker 容器虚拟化与传统虚拟机比较

Docker 概述与应用_第4张图片

10. Docker 概念总结

1.docker:
	docker的出现是为了解决软件跨环境迁移问题,沙箱机制(容器),相互隔离。
2.docker架构:
	客户端:接收用户命令,传输至守护进程
	守护进程:
		镜像:可以理解为是安装包,其实是一系列可执行程序
		容器:给镜像提供运行环境
	仓库:用于存放镜像
		本地仓库: 公司自己搭建的仓库
		远程仓库:官方仓库 https://hub.docker.com/
3.镜像加速器:
	腾讯云、网易云、中科大、阿里云(需要注册阿里云账号登录后分配)
4.docker命令
	a.守护进程命令:
		启动:systemctl start docker
		停止: systemctl stop docker
		重启: systemctl restart docker
		开机自启: systemctl enable docker
		状态: systemctl status docker
	b.镜像命令:
		搜索:docker search 镜像名称:版本号(如果不添加版本,默认是最新版)
		下载:docker pull 镜像名称:版本号(如果不添加版本,默认是最新版)
		删除:docker rmi 镜像名称:版本号(如果不添加版本,默认是最新版)
		查看本地镜像:docker images
		查看本地镜像的id: docker images -q
	c.容器操作命令:
		交互式容器:
			特点:容器创建后直接进入容器内部,一旦退出容器,容器自动停止运行
			命令: docker run -it --name=xxx 镜像名称:版本号 /bin/bash
		守护式容器:
			特点:容器创建后不会直接进入容器内部,需要使用命令进入,退出容器,容器不会停止运行
			命令:docker run -id --name=xxx 镜像名称:版本号
		启动容器:docker start 容器名称/id
		停止容器:docker stop 容器名称/id
		删除容器:docker rm 容器名称/id
		强制删除:docker rm -f 容器名称/id
		进入容器:docker exec -it 容器名称/id  /bin/bash 或者 bash
		查看容器详细信息: docker inspect 容器名称/id
		退出容器:exit
		查看容器:
			正在运行的容器: docker ps
			查看所有容器: docker ps -a	
5.部署四大应用:
	mysql:
		docker run -id --name=c_mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
	nginx:
		docker run -id --name=c_nginx -p 80:80 -v /root/nginx:/usr/share/nginx/html nginx
	tomcat:
		docker run -id --name=c_tomcat -p 8080:8080 -v /root/tomcat:/usr/local/tomcat/webapps tomcat
	redis:
		docker run -id --name=c_redis -p 6379:6379 redis
	#注意在做tomcat以及nginx数据卷挂载时一定要写对容器内部的路径
6.数据卷:
	可以是一个目录或者是文件,并且可以挂载多个
	作用:
		1.容器数据的持久化
		2.容器间完成数据共享
		3.使得容器可以与外部机器进行数据交换
		
7.容器与虚拟机的区别
	a.容器开销极低,在一个虚拟机中可以创建成千上百个容器(相对而言)
    b.容器时MB级别,虚拟机是GB级别
    c.容器其实也是一种虚拟化技术,只不过容器虚拟化的是基于虚拟机虚拟化;虚拟机的虚拟化是基于硬件资源

原文链接:https://qwert.blog.csdn.net/article/details/107326700

你可能感兴趣的:(Operating,System)