Docker

Docker概述

一款产品: 开发–上线 两套环境!应用环境,应用配置!

开发 — 运维。 问题:我在我的电脑上可以允许!版本更新,导致服务不可用!对于运维来说考验十分大?

环境配置是十分的麻烦,每一个及其都要部署环境(集群Redis、ES、Hadoop…) !费事费力。

发布一个项目( jar + (Redis MySQL JDK ES) ),项目能不能带上环境安装打包!

之前在服务器配置一个应用的环境 Redis MySQL JDK ES Hadoop 配置超麻烦了,不能够跨平台。

开发环境Windows,最后发布到Linux!

传统:开发jar,运维来做!

现在:开发打包部署上线,一套流程做完!

安卓流程:java — apk —发布(应用商店)一 张三使用apk一安装即可用!

docker流程: java-jar(环境) — 打包项目帯上环境(镜像) — ( Docker仓库:商店)-----

Docker给以上的问题,提出了解决方案!

win11 docker desktop 更改 容器目录_centos

Docker的思想就来自于集装箱!

JRE – 多个应用(端口冲突) – 原来都是交叉的!
隔离:Docker核心思想!打包装箱!每个箱子是互相隔离的。

Docker通过隔离机制,可以将服务器利用到极致!

本质:所有的技术都是因为出现了一些问题,我们需要去解决,才去学习!

Docker历史

2010年,几个的年轻人,就在美国成立了一家公司 dotcloud

做一些pass的云计算服务!LXC(Linux Container容器)有关的容器技术!

Linux Container容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源。

他们将自己的技术(容器化技术)命名就是 Docker
Docker刚刚延生的时候,没有引起行业的注意!dotCloud,就活不下去!

开源

2013年,Docker开源!

越来越多的人发现docker的优点!火了。Docker每个月都会更新一个版本!

2014年4月9日,Docker1.0发布!

docker为什么这么火?十分的轻巧!

在容器技术出来之前,我们都是使用虚拟机技术!

虚拟机:在window中装一个VMware,通过这个软件我们可以虚拟出来一台或者多台电脑!笨重!

虚拟机也属于虚拟化技术,Docker容器技术,也是一种虚拟化技术!

1 vm : linux centos 原生镜像(一个电脑!) 隔离、需要开启多个虚拟机! 几个G 几分钟
2 docker: 隔离,镜像(最核心的环境 4m + jdk + mysql)十分的小巧,运行镜像就可以了!小巧! 几个M 秒级启动!

聊聊Docker

Docker基于Go语言开发的!开源项目!

docker官网:https://www.docker.com/

文档:https://docs.docker.com/ Docker的文档是超级详细的!

仓库:https://hub.docker.com/

Docker能做什么?

win11 docker desktop 更改 容器目录_docker_02


win11 docker desktop 更改 容器目录_Docker_03

Docker安装

Docker的基本组成

win11 docker desktop 更改 容器目录_linux_04


win11 docker desktop 更改 容器目录_Docker_05

安装Docker

环境准备

Linux要求内核3.0以上
➜ ~ uname -r
4.15.0-96-generic # 要求3.0以上
➜ ~ cat /etc/os-release

NAME="Ubuntu"
VERSION="18.04.4 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.4 LTS"
VERSION_ID="18.04"

UBUNTU_CODENAME=bionic(系统版本)

安装
帮助文档:https://docs.docker.com/engine/install/

1.卸载旧版本
yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-engine

2.需要的安装包
yum install -y yum-utils

3.设置镜像的仓库
a)推荐使用国内的
yum-config-manager
–add-repo
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo b)更新yum软件包索引
yum makecache fast

4.安装docker相关的 docker-ce 社区版 而ee是企业版
yum install docker-ce docker-ce-cli containerd.io

  1. 使用docker version查看是否按照成功
    docker version
  2. 测试
    docker run hello-world
  3. 测试
    ➜ ~ docker run hello-world
    Hello from Docker!

8.查看一下下载的镜像
➜ ~ docker images

REPOSITORY | TAG | IMAGE ID | CREATED | SIZE

hello-world | latest | bf756fb1ae65 | 4 months ago | 13.3kB

卸载docker

1. 卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
2. 删除资源
rm -rf /var/lib/docker
 /var/lib/docker 是docker的默认工作路径!

阿里云镜像加速

win11 docker desktop 更改 容器目录_centos_06


win11 docker desktop 更改 容器目录_linux_07


阿里云地址:https://www.aliyun.com/

1.进入网站,注册一个账号,登录。
然后在主页将光标放到产品分类上,找到容器镜像服务。
2.点击管理控制台,进入容器镜像服务。
3.点击镜像加速器,即可看到自己的镜像加速地址
4.将镜像加速地址复制到/etc/docker/daemon.json文件里面,
如果没有该文件,请手动创建。(注意文件名称的正确性)

(按下面这个格式复制到daemon.json文件中即可)

win11 docker desktop 更改 容器目录_docker_08


5.复制完记得重启docker,重新刷新配置,命令:

systemctl daemon-reload
service docker restart
**过程截图:

win11 docker desktop 更改 容器目录_linux_09

win11 docker desktop 更改 容器目录_centos_10


win11 docker desktop 更改 容器目录_Docker_11

Docker之Run流程和原理

Docker-HelloWorld流程

Docker会去dockerhub(Docker的镜像仓库)上去寻找镜像,

如果不指定镜像版本号,就会直接pull(拉取)默认的镜像版本。

win11 docker desktop 更改 容器目录_linux_12

Docker run 流程图

win11 docker desktop 更改 容器目录_centos_13


底层原理

win11 docker desktop 更改 容器目录_docker_14


win11 docker desktop 更改 容器目录_centos_15

Docker常用命令

Docker的常用命令

win11 docker desktop 更改 容器目录_centos_16

容器命令

给出图片,是希望你们能多用,这样才能熟练掌握。

win11 docker desktop 更改 容器目录_Docker_17

win11 docker desktop 更改 容器目录_centos_18


1.新建容器并启动

win11 docker desktop 更改 容器目录_运维_19


2.列出所有运行的容器

win11 docker desktop 更改 容器目录_linux_20

3.退出容器

win11 docker desktop 更改 容器目录_运维_21


4.删除容器

win11 docker desktop 更改 容器目录_linux_22


5.启动和停止容器的操作

win11 docker desktop 更改 容器目录_centos_23

日志、元数据、进程的查看

1.后台启动容器


win11 docker desktop 更改 容器目录_docker_24

2.查看日志


win11 docker desktop 更改 容器目录_linux_25

3.查看镜像的元数据

win11 docker desktop 更改 容器目录_Docker_26

4.查看容器中进程信息


win11 docker desktop 更改 容器目录_centos_27

进入容器的命令和拷贝命令

我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置。

进入容器:

1.方式一

win11 docker desktop 更改 容器目录_linux_28


2.方式二

win11 docker desktop 更改 容器目录_centos_29

win11 docker desktop 更改 容器目录_Docker_30

拷贝命令:

win11 docker desktop 更改 容器目录_运维_31

常用命令总结

win11 docker desktop 更改 容器目录_linux_32


attach Attach local standard input, output, and error streams to a running container

#当前shell下 attach连接指定运行的镜像

build Build an image from a Dockerfile

#通过Dockerfile定制镜像

commit Create a new image from a container’s changes

#提交当前容器为新的镜像

cp Copy files/folders between a container and the local filesystem

#拷贝文件

create Create a new container

#创建一个新的容器

diff Inspect changes to files or directories on a container’s filesystem

#查看docker容器的变化

events Get real time events from the server # 从服务获取容器实时时间

exec Run a command in a running container # 在运行中的容器上运行命令

export Export a container’s filesystem as a tar archive

#导出容器文件系统作为一个tar归档文件[对应import]

history Show the history of an image # 展示一个镜像形成历史

images List images #列出系统当前的镜像

import Import the contents from a tarball to create a filesystem image

#从tar包中导入内容创建一个文件系统镜像

info Display system-wide information # 显示全系统信息

inspect Return low-level information on Docker objects #查看容器详细信息

kill Kill one or more running containers # kill指定docker容器

load Load an image from a tar archive or STDIN

#从一个tar包或标准输入中加载一个镜像[对应save]

login Log in to a Docker registry

logout Log out from a Docker registry

logs Fetch the logs of a container

pause Pause all processes within one or more containers

port List port mappings or a specific mapping for the container

ps List containers

pull Pull an image or a repository from a registry

push Push an image or a repository to a registry

rename Rename a container

restart Restart one or more containers

rm Remove one or more containers

rmi Remove one or more images

run Run a command in a new container

save Save one or more images to a tar archive (streamed to STDOUT by default)

search Search the Docker Hub for images

start Start one or more stopped containers

stats Display a live stream of container(s) resource usage statistics

stop Stop one or more running containers

tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE

top Display the running processes of a container

unpause Unpause all processes within one or more containers

update Update configuration of one or more containers

version Show the Docker version information

wait Block until one or more containers stop, then print their exit codes

Docker安装Nginx

win11 docker desktop 更改 容器目录_Docker_33

Docker安装Tomact

win11 docker desktop 更改 容器目录_docker_34

Docker部署es+kibana

win11 docker desktop 更改 容器目录_Docker_35

Portainer可视化面板安装

win11 docker desktop 更改 容器目录_运维_36

镜像原理之联合文件系统

win11 docker desktop 更改 容器目录_docker_37

镜像原理之分层理解

分层理解

win11 docker desktop 更改 容器目录_centos_38

commit镜像

win11 docker desktop 更改 容器目录_linux_39

容器数据卷使用

什么是容器数据卷

docker的理念回顾

将应用和环境打包成一个镜像!

数据 - 如果数据都在容器中,那么我们容器删除,数据就会丢失!

需求:数据可以持久化

MySQL,容器删除了,删库跑路!需求:MySQL数据可以存储在本地!

容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!

这就是卷技术!目录的挂载,将我们容器内的目录,挂载到Linux上面!

win11 docker desktop 更改 容器目录_centos_40


总结:容器的持久化和同步操作!容器间也是可以数据共享的!

使用数据卷

方式一 :直接使用命令挂载 -v
docker run -it -v 主机目录:容器内目录 -p 主机端口:容器内端口

➜ docker run -it -v /home/ceshi:/home centos /bin/bash

通过 docker inspect 容器id 查看

win11 docker desktop 更改 容器目录_centos_41


测试文件的同步

1.在容器内创建一个文件 (touch 文件名)

2.退出容器,在挂载的虚拟机或者云服务器上查看该文件是否存在。

测试流程:
1、停止容器
2、宿主机修改文件
3、启动容器
4、容器内的数据依旧是同步的

优点:我们以后修改只需要在本地修改即可,容器内会自动同步!

实战:Mysql同步数据

实战:安装MySQL
思考:MySQL的数据持久化的问题

获取mysql镜像

➜ 1. docker pull mysql:5.7

2.运行容器,需要做数据挂载

3.安装启动mysql,需要配置密码的,这是要注意的!

参考官网hub

win11 docker desktop 更改 容器目录_docker_42


启动容器

-d 后台运行
-p 端口映射
-v 卷挂载
-e 环境配置
– name 容器名字
➜ ~ docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

启动成功之后,我们在本地使用数据库管理软件
(可以使用sqlyog,Navicat,或者workbench)测试一下
sqlyog-连接到服务器的3306–和容器内的3306映射
在本地测试创建一个数据库,查看一下我们映射的路径是否ok!

假设我们将容器删除

可以发现,我们挂载到本地的数据卷依旧没有丢失,这就实现了容器数据持久化功能。

具有挂载和匿名挂载

#匿名挂载
-v 容器内路径!
docker run -d -P --name nginx01 -v /etc/nginx nginx
(-P 是随机指定映射端口的意思)

#查看所有的volume的情况
➜ ~ docker volume ls
可以发现,这种就是匿名挂载,我们在 -v只写了容器内的路径,没有写容器外的路径!

#具名挂载
➜ ~ docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
➜ ~ docker volume ls
DRIVER VOLUME NAME
local juming-nginx
#通过 -v 卷名:容器内路径

#查看一下这个卷(使用docker volume inspect 数据卷名)

所有的docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volumes/xxxx/_data下

如果指定了目录,docker volume ls 是查看不到的

win11 docker desktop 更改 容器目录_运维_43


win11 docker desktop 更改 容器目录_docker_44

数据卷之Dockerfile

Dockerfile 就是用来构建docker镜像的构建文件!命令脚本!先体验一下!

通过这个脚本可以生成镜像,镜像:
1. 创建一个dockerfile文件,名字可以随便 建议Dockerfile
2. 文件中的内容 指令(大写) 参数

FROM centos
VOLUME [“volume01”,“volume02”]
CMD echo “----end----”
CMD /bin/bash

这里的每个命令,就是镜像的一层!

win11 docker desktop 更改 容器目录_linux_45


3.启动自己写的镜像

win11 docker desktop 更改 容器目录_linux_46


这个卷和外部一定有一个同步的目录

win11 docker desktop 更改 容器目录_centos_47


查看一下卷挂载

docker inspect 容器id

多个MySQL同步数据!

命名的容器挂载数据卷!