Docker入门

1.初识docker

docker是一种容器技术,它解决容器环境迁移问题。

1.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.2镜像加速器

阿里云镜像获取地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
创建/etc/docker/daemon.json文件,添加如下内容:
{
"registry-mirrors": ["https://你的ID.mirror.aliyuncs.com"]
}

1.3docker架构

docker架构

- docker使用客户端-服务器端(C/S)架构模式,使用远程API来管理和创建docker容器。
- docker容器通过docker镜像来创建。
- 容器与镜像的关系类似于面向对象中的对象与类。

2.docker命令

2.1进程相关命令

- 启动docker服务
	systemctl start docker
- 停止docker服务
	systemctl stop docker
- 重启docker服务
	systemctl restart docker
- 查看docker服务状态
	systemctl status docker
- 设置开机启动docker服务
	systemctl enable docker

2.2镜像相关命令

- 查看镜像
	docker images
	docker images -q //查看所有镜像id
- 搜索镜像
	docker search 镜像名
- 拉取镜像
	docker pull 镜像名/ 镜像名:版本
- 删除镜像
	docker rmi 镜像id
	docker rmi `docker images -q` //删除所有本地镜像

2.3容器相关命令

- 查看容器
	docker ps //查看正在运行的容器
	docker ps -a //查看所有容器
- 创建并启动容器
	docker run 参数
	参数说明:
		-i:保持容器运行,通常与 -t 同时使用。加入it这两个参数后,容器创建后自动进入容器中,退出容器后,容
器自动关闭。
		-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用。
		-d:以守护(后台)模式运行容器。创建一个容器在后台运行,需要使用docker exec 进入容器。退出后,容
器不会关闭。
		-it:创建的容器一般称为交互式容器。
		-id:创建的容器一般称为守护式容器。
		--name:为创建的容器命名。
		注意:交互式容器,exit后容器会自动关闭,守护式容器会在后台执行。
- 进入容器
	docker exec 参数 容器id/name
- 停止容器
	docker stop 容器名称
- 启动容器
	docker start 容器名称
- 删除容器
	docker rm 容器名称
- 查看容器信息
	docker inspect 容器名称

3.docker容器的数据卷

思考:
	docker容器删除后,容器中产生的数据还在吗?
	docker容器和外部机器可以直接交换文件吗?
	容器之间怎么进行数据交互?

3.1数据卷概念

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

3.2数据卷作用

- 容器数据持久化
- 外部机器和容器间通信
- 容器之间数据交换

3.3配置数据卷

- 创建启动容器时,使用-v参数设置数据卷
docker run ... -v 宿主机目录/文件:容器内目录/文件
	容器目录必须是绝对路径,如果目录不存在会自动创建,可以挂载多个数据卷。

3.3.1一个容器挂载多个数据卷

docker run -it --name=c \
-v ~/data1:/root/data1 \
-v ~/data2:/root/data2 \
centos:7

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

- 在一个容器中修改文件,另一个容器也会更新
docker run -it --name=c1 -v /root/data:/root/data_container centos:7
docker run -it --name=c2 -v /root/data:/root/data_container centos:7

3.4配置数据卷容器

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

4.docker应用部署

端口映射:
- 容器内的网络服务和外部机器不能直接通信
- 外部机器和宿主机可以直接通信
- 宿主机和容器可以直接通信
- 当容器中的网络服务需要被外部机器访问时,可以将容器中提供服务的端口映射到宿主机的端口上,外部机访问宿主机的端口,从而间接访问容器的服务。

docker部署应用

5.dockerfile

思考:
- docker 镜像本质是什么?
	是一个分层文件系统
- docker 中一个centos镜像为什么只有200MB,而一个centos操作系统的iso文件要几个个G?
	centos的iso镜像文件包含bootfs和rootfs,而docker的centos镜像复用操作系统的bootfs,只有rootfs和其它镜像层。
- docker 中一个tomcat镜像为什么有600MB,而一个tomcat安装包只有70多MB?
	由于docker中镜像是分层的,tomcat虽然只有70多MB,但他需要依赖父镜像和基础镜像,所有整个对外暴露的tomcat镜像大小为600多MB。

5.1操作系统组成部分

- 进程调度子系统
- 进程通信子系统
- 内存管理子系统
- 设备管理子系统
- 文件管理子系统
- 网络通信子系统
- 作业控制子系统

5.2linux文件系统

linux文件系统由bootfs和rootfs两部分组成:
	- bootfs:包含bootloader(引导加载程序)和 kernel(内核)
	- rootfs:root文件系统,包含的就是典型 Linux 系统中的/dev,/proc,/bin,/etc等标准目录和文件
	- 不同的linux发行版,bootfs基本一样,而rootfs不同,如ubuntu,centos等

linux文件系统

5.3docker镜像原理

- docker镜像是由特殊的文件系统叠加而成;
- 最底层是bootfs,并使用宿主机的bootfs;
- 第二层是rootfs;
- 再往上可以叠加其它的镜像文件;
- 统一文件系统技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的
视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统;
- 一个镜像可以放在另一个镜像上面,位于下面的镜像称为父镜像,最底部的镜像称为基础镜像;
- 当从一个镜像启动容器时,docker会在最顶层加载一个读写文件系统作为容器。

在这里插入图片描述

6.镜像制作

6.1容器转镜像

- 容器转镜像
	docker commit 容器id 镜像名称:版本号
- 压缩镜像
	docker save -o 压缩文件名称 镜像名称:版本号
- 加载镜像
	docker load -i 压缩文件名称

6.2dockerfile

- dockerfile是一个文本文件
- 包含了一条条的指令
- 每一条指令构建一层镜像,基于基础镜像,最终构建出一个新的镜像
- 对于开发人员:可以为开发团队提供一个完全一致的开发环境
- 对于测试人员:可以直接拿开发时所构建的镜像或者通过dockerfile文件构建一个新的镜像开始工作
- 对于运维人员:在部署时,可以实现应用的无缝移植

docker hub
参数

6.2.1发布springboot项目

FROM java:8	//定义父镜像
MAINTAINER zhy <zhy@qq.com>	//定义作者信息,可省略
ADD springboot.jar app.jar	//将jar添加到容器,并重命名
CMD ["java","-jar","app.jar"]  //定义容器启动执行的命令
通过dockerfile构建镜像 -f 文件路径,-t 镜像名称:版本 .(注意空格点,寻址)
docker build -f ./dockerfile文件 -t 指定镜像名称 . .
docker run -id -p 9000:8080 --name=指定容器名称 镜像名称

7.docker compose

docker compose是一个编排多容器分布式部署的工具,提供命令集中管理容器化应用的完整开发周期,包括服务
构建,启动和停止。使用步骤:
- 利用dockerfile定义运行环境镜像;
- 使用docker-compose.yml定义组成应用的各服务;
- 运行docker-compose up 启动应用;(down关闭)

7.1安装docker compose

安装docker compose

7.2 编排nginx+springboot

1.创建docker-compose目录
	mkdir ~/docker-compose
	cd ~/docker-compose

2.编写docker-compose.yml文件
	version: '3'
	services:
		nginx:
			image: nginx
			ports:
				- 80:80
			links:
				- app
			volumes:
				- ./nginx/conf.d:/etc/nginx/conf.d
		app:
			image: app
			expose:
				- "8080"

3.创建./nginx/conf.d目录,在该目录下编写app.conf文件
	server {
		listen 80;
		access_log off;
		location / {
			proxy_pass http://app:8080/hello;
		}
	}

4.在~/docker-compose目录下启动容器
	docker-compose up

8.docker私有仓库

Docker官方的Docker hub(https://hub.docker.com)是一个用于管理公共镜像的仓库,我们可以从上面拉
取镜像 到本地,也可以把我们自己的镜像推送上去。但是,有时候我们不希望将自己的镜 像放到公网当中,
那么这时我们就需要搭建自己的私有仓库来存储和管理自己的镜像

8.1搭建私有仓库

# 1、拉取私有仓库镜像
docker pull registry
# 2、启动私有仓库容器
docker run -id --name=registry -p 5000:5000 registry
# 3、打开浏览器 输入地址http://私有仓库服务器ip:5000/v2/_catalog,看到{"repositories":[]} 表示私有仓库搭建成功
# 4、修改daemon.json
vim /etc/docker/daemon.json
# 在上述文件中添加一个key,保存退出。此步用于让 docker 信任私有仓库地址;注意将私有仓库服务器ip修改为自己私有仓库服务器真实ip
{"insecure-registries":["私有仓库服务器ip:5000"]}
{"insecure-registries":["192.168.220.12:5000"]}
# 5、重启docker 服务
systemctl restart docker
docker start registry

8.2将镜像上传到私有仓库

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

8.3从私有仓库拉取镜像

#拉取镜像
docker pull 192.168.220.12:5000/centos:7
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值