Docker基础篇

Docker简介


学习方法,理解 a.是什么 b.能干吗 c.去哪里下载 d.怎末操作 e. hello world


1、是什么

**docker解决了什么?**统一开发、测试、运维的使用的环境,确保在任何地方的运行环境一致。。并且可以快速部署。系统平滑移植

包含两方面的技术:镜像技术、镜像即应用(在不同环境仍然可以正常运行)

**docker理念?**一次镜像,处处运行;;从搬家到搬楼

可以将源码、运行环境、配置文件、特殊引导等打成一个包,即将应用打成一个镜像

spring提供单独的配置中心,这个是怎末应用的???

docker基于go语言实现的云开源项目

Docker解决了运行环境和配置问题的软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。

2、容器与虚拟机比较

传统虚拟机:Virtual Machine 带环境安装的一种解决方案,运行另一套系统,能够使引用程序,操作系统和硬件三者之间逻辑不变。

Docker容器是在操作系统层面上实现虚拟化,直接使用本地的操作系统,而传统虚拟机是在硬件层面实现虚拟化。与传统的虚拟机相比,Docker优势体现为启动速度快、占用面积小。

a.传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整的操作系统,在该系统上在运行所需应用进程。

b.容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。

c.每个容器之间互相隔离,每个容器有自己的文件系统,容器之间进程不会相互影响,能区分计算资源。

3、能干嘛

技术职级的改变 coder–>programmer–>software engineer–>DevOps engineer

更容易部署、扩容、缩容、运维,更高的利用资源

4、去哪里下载

官网 www.docker.com 官网有官方文档

仓库 https://hub.docker.com

Docker安装

1、Docker基本组成

镜像–Java类模板。只读模板,用来创建容器,一个镜像可以创建多个容器

容器–依据模板创建的对象。独立运行一个或者一组应用,可以看做简易版的Linux环境和运行在其中的应用程序。

仓库–镜像的存放地址。有公开的和私有的,公司内部可以有自己的仓库。

2、Docker平台架构图解

入门版:

在这里插入图片描述

工作原理:

Docker是一个客户端-服务结构的系统,Docker守护进程运行在主机上,然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。容器,是一个运行时环境,就是我们前面说到的集装箱。

架构版:整体架构以及底层通信原理

docker是一个c/s模式的架构,后端是一个松耦合架构,众多模块各司其职。

Docker运行的基本流程:

1、用户是使用Docker Client与Docker Daemon建立通信,并发送请求给后者。

2、Docker Daemon作为Docker 架构中的主体部分,首先提供Docker Server的功能使其可以接受Docker Client的请求。

3、Docker Engine执行Docker 内部的一系列工作,每一项工作都是以一个Job的形式存在。

4、Job的运行过程中,当需要容器镜像时,从Docker Registry中下载镜像,并通过镜像管理驱动Graph driver将下载镜像以Graph的形式存储。

5、当需要为Docker 创建网络环境时,通过网络管理驱动Network driver创建并配置Docker容器网络环境。

6、当需要限制Docker 容器运行资源或执行用户指令等操作时,通过Exec driver 来完成。

7、Libcontainer是一项独立的容器管理包,Network driver以及Exec driver都是通过Libcontainer来实现具体对容器进行的操作。

3、安装

cat /etc/redhat-release

 sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

yum -y install gcc

yum -y install gcc-c++

sudo yum install -y yum-utils

sudo yum-config-manager \
    --add-repo \	https://download.docker.com/linux/centos/docker-ce.repo     不用这个镜像仓库,使用阿里云的或者网易云的
 sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
 sudo systemctl start docker
 sudo systemctl status docker
 sudo systemctl stop docker
 sudo docker run hello-world

Docker常用命令

1、帮助启动类

启动:systemctl start docker
停止:systemctl stop docker
重启:systemctl restart docker
状态:systemctl status docker
开机启动:systemctl enable docker
概要信息:docker info
帮助信息:docker --help

2、镜像命令

当前主机的所有镜像:docker images 
	-a:显示历史的镜像 
	-q:只显示镜像ID
查询某个镜像:docker serach
	--limit 5
拉取某个镜像:docker pull repository:tag
查看镜像/容器/数据卷所占空间:docker system df
删除镜像:docker rmi 镜像ID
	-f:force delete
	//delete all images:docker rmi -f $(docker images -qa)

docker虚悬镜像:镜像名称和tag都是<none>

3、容器命令

新建+启动容器

docker run [OPTIONS] IMAGE [COMMAND] [ARG…]

常用命令:

--name:容器名字
-d:后台运行并返回容器ID,启动守护式容器

-i:以交互式运行容器
-t:为容器重新分配一个伪输入终端
-it:启动交互式容器,前台有伪终端,等待交互

-P:随机端口映射
-p:指定端口映射  外部访问:docker访问内部的端口   做一个映射
列出当前所有正在运行的容器

docker ps [OPTIONS]

  -a, --all       Show all containers,显示正在运行以及历史运行的所有容器
  -n, --last int  Show n last created containers 显示最近n个创建的容器,默认为1
  -l, --latest    Show the latest created container
      --no-trunc  Don't truncate output
  -q, --quiet     Only display container IDs
退出容器

exit 退出–容器停止

CTRL+P+Q 退出–容器不停止

启动已停止运行的容器

docker start container-ID or Name

重启容器

docker restart container-ID or Name

停止容器

docker stop container-ID or Name

强制停止容器

docker kill container-ID or Name

删除已停止的容器

docker rm container-ID

强制删除:docker rm -f container-ID

启动守护式容器(后台服务器)

docker run -d 镜像名称

docker 容器后台运行某些镜像,必须要求存在至少一个前台进程,否则他就会认为自己没有事情可做,立即自杀。这些镜像若想在没有前台进程时运行,需要使用命令行模式以前台交互运行。

查看容器日志

docker logs container-ID

查看容器内运行的进程

docker top container-ID

查看容器内部细节

docker inspect container-ID

进入正在运行的容器并以命令交互

docker exec -it container-ID /bin/bash

  • exec是在容器中打开新的终端,并且可以启动新的进程;用exit退出,不会导致容器的停止。

docker attach container-ID

  • attach直接进入容器启动命令的终端,不会启动新的进程;用exit退出,会导致容器的停止。
从容器内拷贝文件到主机上

docker cp containerID:容器内路径 目的主机路径

导入和导出容器

export | save:导出容器内的内容作为一个tar归档文件

import | load:从tar包中的内容创建一个新的文件系统再导入为镜像

docker export [OPTIONS] CONTAINER
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

docker export containerID > 镜像名称以及后缀
cat 镜像名称以及后缀 | docker import - 镜像用户/镜像名:镜像版本号
docker save [OPTIONS] IMAGE [IMAGE...]
docker load [OPTIONS] 

docker save > 镜像名称以及后缀 containerNAME:containerTAG

Docker镜像

分层镜像

1、轻量级、可执行的独立软件包

2、分层的镜像

在这里插入图片描述

3、UnionFS(联合文件系统):分层、轻量级并且高性能的文件系统,支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。

镜像可以通过分层来进行继承,基于基础镜像,可以制作具体的应用镜像。

特性:一次同时加载多个文件系统,从外面看,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

4、Docker镜像加载原理

镜像由层层文件组成,UnionFS
在这里插入图片描述在这里插入图片描述

  • Docker镜像层都是只读的,容器层是可写的。当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。
    在这里插入图片描述

Docker镜像的commit

提交容器副本使之成为一个新的镜像。

  • docker commit -m=“提交的描述信息” -a=“作者” container ID 要创建的目标镜像名:[标签名]
Ubuntu 安装 vim
#更新包管理工具
apt-get update
#安装需要的工具 vim
apt-get install vim 
docker commit -m="vim" -a="wxx" 14d99 xxUbuntu:0.0.2

在这里插入图片描述

本地镜像发布到阿里云

$ docker login --username=进击的蓉儿呀 registry.cn-hangzhou.aliyuncs.com
$ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/wxxzz/wxxubuntu:[镜像版本号]
$ docker push registry.cn-hangzhou.aliyuncs.com/wxxzz/wxxubuntu:[镜像版本号]

本地镜像发布到私有库

Docker Registry 可以自本地搭建私有库

docker pull registry
启动私有库:docker run -d -p 5000:5000 -v /wxxuse/myregistry/:/tmp/registry --privileged=true registry

将镜像推送到私有库
查看私有库的内容:curl -XGET http://ip:port/v2/_catalog
修改tag:docker tag imageName:tag host:port/repositpry:tag
修改配置文件,支持http:修改/etc/docker/daemon.json 增加 "insecure-registries":["ip:port"]
push到私有库:docker push ip:port/imageName:tag

Docker容器数据卷

1、添加–privileged=true 解决挂载权限不够的问题

2、卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System 提供一些用于持续存储或共享数据的特性:

卷的设计目的就是数据库的持久化,完全独立于容器的生存周期,因此Docker不会再容器删除时删除其挂载的数据卷。

docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名

3、特点

数据卷可在容器之间共享或重用数据

卷中的更改可以直接实时生效

数据卷中的更改不会包含在镜像的更新中

数据卷的生命周期一直持续到没有容器使用它为止

4、读写规则映射添加说明

​ 容器内可以读写 docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:rw 镜像名

​ 限制容器内只读 docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro 镜像名

5、卷的继承和共享

容器1完成和宿主机的映射,容器2继承容器1的映射

docker run -it --privileged=true -volumes-from 容器1的名字 镜像名

Docker常规安装简介

搜索-拉取-查看-启动-停止-移除

1、tomcat高版本主页有所更改,可以使用低版本的7、8完全够用;

2、MySQL再docker的默认字符集是拉丁,不支持中文?

​ docker run -it --privileged=true -v /wxx/mysql/log:/var/log/mysql -v /wxx/mysql/data:/var/lib/mysql -v /wxx/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=wangxinxin --name mysql mysql:5.7

再本地的/wxx/mysq/conf下新建my.cnf,输入内容如下

[client]
default_character_set=utf8
[mysqld]
collation_server=utf8_general_ci
character_set_server=utf8

重启容器,校验是否支持中文

3、MySQL 实例被删除,如何恢复?

已在上面的启动命令中数据卷挂载中实现。

4、启动redis,要使用自己的配置文件

docker run -p 6379:6379 --name redis -d --privileged=true
-v /app/redis/redis.conf:/etc/redis/redis.conf
-v /app/redis/data:/data
redis-server /etc/redis/redis.conf
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值