Docker学习


Docker入门

简介

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

安装

Centos 7安装Docker

yum remove -y docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

yum install -y yum-utils device-mapper-persistent-data lvm2

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

yum install -y docker-ce

配置镜像源

vi /etc/docker/deamon.json

{
  "registry-mirrors": [
    "https://hub-mirror.c.163.com",
    "https://registry.aliyuncs.com",
    "https://registry.docker-cn.com",
    "https://docker.mirrors.ustc.edu.cn"
  ]
}

Docker组成

一个完整的Docker有以下几个部分组成:

  • DockerClient客户端
  • Docker Daemon守护进程
  • Docker Image镜像
  • DockerContainer容器

在这里插入图片描述

相关命令

# 启动docker
systemctl start docker
systemctl restart docker
systemctl stop docker
# 查看docker运行状态
systemctl status docker
# 设置开机启动
systemctl enable docker

操作镜像

# 查看镜像
docker images
# 搜索镜像
docker search xxx

# 拉取镜像
docker pull iamgesName:Version

# 删除镜像
docker rmi 

容器操作

# 创建容器
docker run --name ContainerName -i

# 删除
docker rm
docker start
docker stop
docker ps -a

# 查看容器信息
docker inspect 

-i 以交互模式运行容器
-d 以守护模式运行容器
-t 为容器重新分配一个伪输入终端

-it 交互式容器
-id 守护式容器

数据卷

数据卷是宿主机中的一个目录或文件(将容器目录映射到宿主机中)
当容器目录和数据卷目录绑定后,对方的修改会立即同步
一个数据卷可以被多个容器绑定

数据卷的作用

  • 容器数据持久化
  • 客户端和容器数据交换
  • 容器间的数据交换
docker run ... -v 宿主机:容器

## 继承其他容器的数据卷
docker run ... --volume-from ...

Docker部署

安装MySQL

docker pull mysql:5.7

docker run -id -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

安装Redis

docker pull redis:5.0
docker run -id -p 6379:6379 redis:5.0

Docker镜像原理

在这里插入图片描述

  • Docker镜像是由特殊的文件系统叠加而成的
  • 最低端是bootfs,并且使用宿主机的bootfs
  • 第二层是root文件系统rootfs,称为Base Image
  • 然后再往上可叠加其他的镜像文件
    在这里插入图片描述
    分层文件系统
docker inspect redis

在这里插入图片描述

镜像制作

  1. 容器转换为镜像

docker commit 容器ID 镜像名称:版本号

# 将镜像转换为压缩文件
docker save -o 压缩文件名称 镜像名称:版本号

# 将压缩文件转换为镜像
docker load -i 压缩文件名称

  1. 通过DockerFile制作镜像

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

制作案例

FROM centos:7
MAINTAINER name<email>
RUN yum install -y vim
WORKDIR /usr
CMD /bin/bash

然后构建

docker build -f DockerFile路径 -t 镜像名称:版本号 .
  • Docker在运行时分为Docker引擎(服务端守护进程) 以及客户端工具。
  • 使用Docker 命令,其实就是在使用客户端工具与 Docker引擎进行交互。
  • Docker Build命令构建过程其实是在Docker引擎中完成的,而不是在本机环境。
  • 所以Docker Build最后的 .号,其实是在指定镜像构建过程中的上下文环境的目录。

那么如果在DockerFile中使用了一些COPY等指令来操作文件,如何让Docker引擎获取到这些文件呢?这里就有了一个镜像构建上下文的概念,当构建的时候,由用户指定构建镜像的上下文路径,而Docker Build会将这个路径下所有的文件都打包上传给Docker引擎,引擎内将这些内容展开后,就能获取到所有指定上下文中的文件了。

定义DockerFile发布Springboot项目

准备springboot-xxx.jar
编写DockerFile文件

FROM java:8
MAINTAINER xxx<xxx>
ADD springboot-xxx.jar app.jar
CMD java -jar app.jar

构建

docker build -f ./xxx -t app .

服务编排

按照一定的业务规则批量管理容器

Docker Compose:一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括微服务构建、启动和停止。使用步骤:

  1. 利用DockerFile定义运行环境镜像
  2. 利用docker-compose.yml定义组成应用的各服务
  3. 运行docker-compose up启动应用
docker-compose安装
sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
  • version:指定 docker-compose.yml 文件的写法格式
  • image:指定服务所使用的镜像
  • expose:暴露端口,只将端口暴露给连接的服务,而不暴露给主机
  • links:将指定容器连接到当前连接,可以设置别名,避免ip方式导致的容器重启动态改变的无法连接情况
使用docker compose部署nginx + springboot项目

创建docker-compose.yml文件

version: '3'
services:
	nginx:
		image: nginx
		port:
			- 80:80
		links:
			- app
		volumes:
			- ./nginx/conf.d:etc/nginx/conf.d
	app:
		image: app
		export:
			- "8080"

创建conf.d文件

mkdir -p ./nginx/conf.d
cd ./nginx/conf.d
vim nginx.conf

nginx.conf

server {
	listen 80;
	access_log off;
	location / {
		proxy_pass http://app:8080;
	}
}
docker-compose up

-d 以守护模式运行容器

Docker私有仓库

docker pull registry

docker run -id --name=registry -p 5000:5000 registry

# 访问 ip:5000/v2/_catalog

vim /etc/docker/deamon.json

+ "insecure-registries": ["ip:5000"]

systemctl restart docker

# 上传镜像
docker tag centos:7 ip:5000/centos:7
docker push ip:5000/centos:7


# 拉取镜像
docker pull ip:5000/centos:7

容器虚拟化和传统虚拟化比较

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值