3.Docker学习笔记

本文详细介绍了Docker的安装、基本命令、镜像和容器的管理,包括数据卷的使用来实现数据持久化,以及Dockerfile的编写和Docker服务编排。此外,还涵盖了Docker在MySQL、Tomcat、Nginx和Redis等应用的部署实践,并讲解了如何搭建和使用私有仓库。
摘要由CSDN通过智能技术生成

目录

1 初识Docker

1.1 Docker

1.2 安装Docker

1.3 Docker架构

1.4 配置加速器

2 Docker命令

2.1 Docker服务相关命令(daemon)

2.2 Docker镜像相关命令(Image)

2.3 Docker容器相关命令(container)

3.Docker容器的数据卷

3.1 数据卷

3.2 数据卷配置

3.3 数据卷容器

4.Docker的应用部署

4.1 MySQ部署

4.2 Tomcat部署

4.3 Nginx部署

4.4 Redis部署

 5.Dockerfile

5.1 Docker镜像原理

5.2 Docker如何制作

5.3 Dockerfile案例

6. Docker服务编排

6.1 服务编排

 6.2 Docker Compose

7.Docker的私有仓库

1 初识Docker

1.1 Docker

代码开发涉及不同的环境

ps:开发环境和测试环境不同,会报bug。

Docker: 是一个开源的应用容器引擎。诞生于2013年,基于Go语言。

  • 可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植的容器中,然后发布到Linux机器上;
  • 完全使用沙箱机制,相互隔离;
  • 分为CE(社区版)和EE(企业版)

1.2 安装Docker

#yum包更新
yum update

#安装需要的软件包,yum-util提供yum-config-manger功能,另外两个是deviceapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2

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

#安装docker,出现输入的界面都按y
yum install -y docker-ce

#查看docker版本,验证是否成功
docker -v

1.3 Docker架构

镜像(Image):相当于一个root文件系统,比如官方镜像ubuntu16.04就是包含了完整的一套ubuntu16.04最小系统的root文件系统;

容器(contrainer):镜像和容器的关系,就像是面向对象程序设计中的类和对象一样,镜像是静态的定义,容器时镜像运行时的实体。容器可以创建、启动、删除、暂定等;

1.4 配置加速器

●USTC:中科大镜像加速器
●阿里云
●网易云
●腾讯云
例如:阿里云,登录账号--左上角的产品与服务--容器镜像服务--镜像加速器文档

根据文档上操作即可。

2 Docker命令

2.1 Docker服务相关命令(daemon)

#1.启动docker服务
systemctl start docker

#2.查看状态
systemctl status docker  ##activate(running)显示正在运行中

#3.停止
systemctl stop docker

#4.重启
restart docker

#5.开机启动docker
systemctl enable docker

2.2 Docker镜像相关命令(Image)

#查看镜像
docker images #查看本地

#搜索镜像
docker search redis

#拉取镜像
docker pull redis

#删除
docker rmi id
#id查看用docker images查看
#删除所有的镜像
docker rmi 'docker images -q'


2.3 Docker容器相关命令(container)

#1.查看容器
docker images

#2.创建容器
docker run -it --name=hxf centos:7 /bin/bash
#查看内容
ll
#退出容器
exit
#i:保持容器运行,通常与t同时使用

#3.查看正在运行的容器
docker ps
#全部的
docker ps -a

#进入容器内部 ,退出容器不会关闭
docker exec -it hxf /bin/bash
ll
exit
#t:为容器重新分配一个输入终端,通常于i同时使用


#4.停止容器
docker stop hxf
docker ps -a

#5.启动容器
docker start hxf

#6.删除容器
docker rm hxf
#删除所有的容器
docker ps -aq
docker rm 'docker ps -aq'  #ps:不能删除正在运行的容器

#查看容器的信息
docker inspect hxf




3.Docker容器的数据卷

问题引入:

docker的容器删除后,在容器中产生的数据还在吗? 不在了

 

Docker容器和外部机器可以直接交换文件吗?

容器之间想要进行数据交换? 

3.1 数据卷

数据卷是宿主机的一个目录或文件;

当容器目录和数据卷目录绑定后,对方的修改会立即同步;

一个数据卷可以被多个容器同时挂载;

数据卷的作用:

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

3.2 数据卷配置

docker run ... -v 宿主机目录(文件):容器内目录(文件)...

注意:

  • 目录必须是绝对路径
  • 如果目录不存在,会自动创建
  • 可以挂载多个数据卷
docker ps -a
docker images
#创建数据卷
docker run -it --name=hxf1 -v /root/data:/root/data_container centos:7 /bin/bash

##打开新的窗口:文件--克隆会话

##宿主机中
cd data
ll
touch dockerlearning.txt

##切换容器
cd data_container/
ll
#可以看到文件同步
#在容器中
echo itcast > a.txt
ll
#查看文件内容
cat a.txt

##切换至宿主机,发现文件也可以同步


##一个容器可以挂载多个目录
docker run -it --name=hxf \
-v ~/data2:/root/data2 \
-v ~/data3:/root/data3 \

 

##创建两个容器
docker run -it --name-hxf2 -v ~/data:/root/data centos:7
cd ~
ll

##克隆一个会话
docker run -it --name-hxf3 -v ~/data:/root/data centos:7

##在hxf3写些内容
echo itcast > itcast.txt
ll
cat itcast.txt


ps:通过数据卷可以同时挂载到两个容器上。

3.3 数据卷容器

多容器进行数据交换:

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

##配置数据卷容器

docker ps -a
ll
docker inspect


#1.创建启动数据卷容器,使用-v参数 设置数据卷
docker run -it --name=hxf2 -v /volume centos:7 /bin/bash

#2.创建启动hxf hxf1 容器,使用--volume-from参数设置数据卷
docker run -it --name=hxf --volume-from hxf2 centos:7 /bin/bash
docker run -it --name=hxf1 --volume-from hxf2 centos:7 /bin/bash

4.Docker的应用部署

4.1 MySQ部署

案例:在Docker中部署MySQL,并通过外部mysql客户端操作MySQL server

实现步骤:

  • 搜索MySQL镜像
  • 拉取MySQL镜像
  • 创建容器
  • 操作容器中MySQL

思考:外部机器和docker是不能直接通信,那怎么办呢?

以上操作被称为端口映射:将宿主机上的3307端口和容器中的3306端口进行映射,然后外部机器访问3307端口即可。

docker images
#查看有无镜像
#搜索镜像
docker search mysql
#拉取镜像
docker pull mysql:5.6

#创建容器,设置端口映射、目录映射
mkdir ~/mysql
cd ~/mysql
docker run -id \
-p 3307:3306 \  #将容器的3306端口映射为宿主机的3307端口
--name=hxf_mysql \
-v $PWD/conf:/etc/mysql/conf.d \  #将主机当前目录下的conf/my.cnf挂载到容器的/etc/mysql/my.cnf配置目录
-v $PWD/logs:/logs \  #将主机当前目录的logs目录挂载到容器的logs
-v $PD/data:var/lib/mysql \    #当主机当前目录下的data目录挂载到容器的/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=123456 \  #初始化用户密码
mysql:5.6

#进入容器内部
docker exec -it hxf_mysql /bin/bash
#登录
mysql -uroot -p

show datdabase;

create database db1;

本机连接:

 4.2 Tomcat部署

案例:在Docker中部署Tomcat,并通过外部机器访问Tomcat

实现步骤:

  • 搜索Tomcat镜像
  • 拉取Tomcat镜像
  • 部署项目
  • 测试访问
docker search tomcat
docker pull tomcat
mkdir ~/tomcat
cd ~/tomcat
docker run -id --name=hxf_tomcat \
-p 8080:8080 \  #将容器的8080端口映射到主机8080端口
-v $PWD:/usr/local/tomcat/webapps \   #将主机中当前目录挂载到容器中的webapps
tomcat

4.3 Nginx部署

 

案例:在Docker中部署Nginx,并通过外部机器访问Nginx

实现步骤:

  • 搜索Nginx镜像
  • 拉取Nginx镜像
  • 创建容器
  • 测试访问
docker search nginx
docker pull nginx
#在/root目录下创建nginx目录用于存储nginx数据信息
mkdir ~/nginx
cd ~/nginx
mkdir conf 
cd conf
#在~/nginx/conf下创建nginx.conf文件,粘贴官方文件内容
vim nginx.conf

docker run --id --name=hxf_nginx \
-p 80:80 \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
nginx

4.4 Redis部署

案例:在Docker中部署Redis,并通过外部机器访问Redis

实现步骤:

  • 搜索Redis镜像
  • 拉取Redis镜像
  • 创建容器
  • 测试访问
docker search redis
docker pull redis:5.0

docker run -id --name=hxf_redis -p 6379:6379 redis:5.0

#使用外部机器连接redis
./redis-cli.exe -h 192.168.149.135 -p 6379

 5.Dockerfile

5.1 Docker镜像原理

思考:

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

 linux文件系统由bootfs和rootfs两部分组成。

  • bootfs包含了bootloader(引导加载程序)和kernel(内核)
  • rootfs包含root文件系统,包含的就是典型的Linux系统中的/dev,/proc,/bin,/etc等标准目标和文件。

Docker镜像原理:

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

 

 5.2 Docker如何制作

容器转为镜像:

 

  • docker commit 容器id 镜像名称:版本号
  • docker save -o 压缩文件名称 镜像名称:版本号
  • docker load -i 压缩文件名称
    docker ps -a
    docker commit 3812 hxf_tomcat:1.0
    docker images
    docker rmi 29b624
    
    docker images
    docker exec -it hxf_tomcat bash
    
    docker save -o hxf_tomcat.tar hxf_tomcat:1.0
    
    docker rmi 3ab93al
    docker load -i hxf_tomcat.tar
    docker images
    

dockerfile:

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

hub.docker官网上进行查询,按照说明上的命令运行即可

 

 5.3 Dockerfile案例

目标:定义dockerfile,发布boostrap项目

将已有的项目打包:maven projects--package

上传文件:Alt+P---put 包的路径名

cd ~ 

mv 项目文件 ./docker-files/
cd docker-files

vim springboot_dockerfile.txt

#定义父镜像:from java:8
FROM java:8

#定义作者信息
MAINTAINER hxf <hxf@itcast.cn>

#将jar包添加到容器
ADD springboot-hello-0.0.1-SNAPSHOT.jar app.jar
CMD java -jar app.jar

#定义
docker build -f ./springboot_dockerfile -t app .
docker images
docker run -id -p 9000:8080 app
docker ps -a

6. Docker服务编排

6.1 服务编排

微服务架构的应用系统中一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停

  • 要从dockerfile build image 或者去dockerhub拉取image;
  • 要创建多个container
  • 要管理这些container(启动停止删除)
  • 维护的工作量很大

服务编排:按照一定的业务 规则批量管理容器

 6.2 Docker Compose

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

使用步骤:

  • 利用Dockerfile定义运行环境镜像;
  • 使用docker-compose.yml定义组成应用的而各种服务;
  • 运行docker-compose up 启动应用;

##安装docker compose

# Compose目前已经完全支持Linux. Mac os和windows,在我们安装Compose之前,需要先安装Docker.下面我们
以编译好的二进制包方式安装在L inux系统中。
Jur1 -L https://github. com/docker /compose/releases/down1oad/1.22.0/docker -compose-' uname -s '-' uname -m ' -o /usr/1ocal/bin/docker-compose

=设置文件可执行权限
chmod +x /usr/1ocal/bin/docker-compose

#查看版本信息
docker-compose -version
##卸载docker compose

#二进制包方式安装的,删除二进制文件即可
rm /usr/local/bin/docker-compose
##使用docker compose 编排nginx+springboot项目

#创建docker-compose目录
mkdir ~/docker-compose
cd ~/docker

#编写docker-compose.yml文件
version: " 3"
services:
  nginx:
  inmage: nginx
  ports:
    -80:80
  1inks :
    -app
  volumes:
    - ./nginx/conf.d:/etc/nginx/conf.d 
  app:
    image: app
    expose:
      -"8080"
vim docker-compose.yml
mkdir p ./nginx/conf.d
cd ./


#创建./nginx/conf.d目录
mkdir -p ./nginx/conf.d


#在./nginx/conf.d目录下编写hxf.conf文件
server{
    listen 80;
    access_1og off;
    location / {
    proxy_ pass http: //app:8080; #反向代理
}


#启动
docker-compose up





7.Docker的私有仓库

##1.私有仓库搭建
#拉取仓库镜像
docker pull registry

#启动私有仓库容器
docker run -id --name=registery -p 5000:5000 registry

#打开浏览器, 输入地址http://私有仓库服务器ip:5000/v2/_catalog,看到{"repositories":[]}表示私有仓库 搭建成功

#修改daemon.json
vim /etc/docker/daemon.json

#在上述文件中添加一个key,保存退出,此步用于让docker信任私有仓库地址,注意将私有仓库服务器ip修改为自己私有仓库服务器真实ip
{"insecure-registries":["私有仓库服务器ip:5000"]}

#重启docker服务
systemctl restart docker
docker start registry
##2.将镜像上传至私有仓库
#标记镜像为私有仓库的镜像
docker tag centos:7 私有仓库服务器IP:5000/centos:7

#上传标记的镜像
docker push 私有仓库服务器IP:5000/centos:7

 以上笔记学习的课程是:黑马程序员 Docker教程!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值