Docker学习

笔记参考:https://blog.csdn.net/qq_21197507/article/details/115071715

Docker安装脚本

#!/bin/bash

# 卸载旧版本的 Docker
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

# 安装 Docker 依赖的软件包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# 添加阿里云镜像源
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 更新 yum 软件包索引
sudo yum makecache fast

# 安装 Docker
sudo yum install docker-ce docker-ce-cli containerd.io

# 启动 Docker 服务
sudo systemctl start docker

#设置开机自启动
sudo systemctl enable docker

# 验证 Docker 是否成功安装
sudo docker run hello-world
#copy上述脚本到.sh文件
vi docker.sh
#设置脚本权限
chmod +x docker.sh

#启动脚本
./docker.sh

run命令的执行流程

image.png
image.png

底层原理

Docker 是怎么工作的

Docker是一个Client-Server的结构系统,Docker是守护进程运行在主机行,通过Socket从客户端连接
DockerServer接受到Docker-Client的指令,就会执行命令
image.png

Docker为什么比VM(虚拟机)快?

1、Docker有着比VM更少的抽象层
VM是完成的虚拟器
Docker只是一个容器
image.png
2、docker利用的宿主机的内核,VM需要Guest OS
所以说新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统内核,避免引导。
虚拟机是加载Guest OS,启动是分钟级别的。而docker 是利用宿主机的操作系统,省略了很多步骤,启动级别是秒级的
image.png

Docker常用命令

帮助命令

docker --help
docker info
docker version

官网命令文档

https://docs.docker.com/reference/

镜像命令

docker images   
docker search mysql 
docker search mysql --filter=stars=5000 

下载镜像

docker pull

image.png

删除镜像

docker rmi sadaop1
docker rmi -f $(docker images -ap)

容器命令

前提:有了镜像才可以创建容器,下载centos镜像来学习

docker pull centos

容器数据卷

数据不应该放在容器中,因为容器删除,数据也会删除
MySQL,容器删除了,数据也会没了。需求:MYSQL数据可以存储在本地
容器之间可以有一个数据共享的技术。Docker容器中产生的数据,同步到本地
卷技术,目录的挂载,将我们容器的内的目录挂载到Linux上面
总结一句话:容器的持久化和同步操作,容器间也是可以数据共享

方式一

直接命令方式挂载

docker  run -it -v 主机目录:容器目录
## 当在centos里面的/home创建文件的时候,主机上的ceshi目录下也会有
docker run -it -v /home/ceshi:/home centos /bin/bash
docker inspect 741e899d0cc0

image.png

安装MySQL

docker run -d -p 3700:3306 
-v /home/mysql/conf:/etc/mysql/conf.d 
-v /home/mysql/data:/var/lib/mysql 
-e MYSQL_ROOT_PASSWORD=123456 
--name=mysql01 
mysql

#####  说明
-v 挂载mysql的配置到主机的/home/mysql/conf目录下
-v 挂载mysql的数据到/home/mysql/data目录下
-e 设置MySQL的登录密码
--name  设置容器名字
mysql   启动的镜像

具体挂载和匿名挂载

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

 # 如何确定是匿名挂载还是具名挂载,还是指定路径挂载  
-v 容器内路径 # 匿名挂载,如 -v /etc/nginx nginx
-v 卷名:容器内路径 # 具名挂载,卷名没有路径/,如 -v juming-nginx:/etc/nginx
-v 宿主机路径:容器内路径 # 指定路径挂载,一般/开头,如 -v /home/mysql/data:/var/lib/mysql 
1234

# 通过 -v 容器内路径:ro rw 改变读写权限
ro readonly # 只读
rw readwrite # 可读可写

# 一旦设置了这个容器权限,容器对我们挂载出来的内容就有了限定了
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx

# ro 只要看到ro就说明这个路径只能通过宿主机来操作,容器内部是无法进行操作的

Dockerfile

用来构建docker镜像的构建文件

docker run -it --name docker1 centos
docker run -it --name docker02 --volumes-from docker1  centos
docker run -it --name docker03 --volumes-from docker1  centos

docker2,3都挂载在docker1上,删除docker1时候,docker2,3数据都有,且同步
这是因为docker1,2,3本质都是挂载在主机上某个目录的

MySQL数据同步

docker run -d -p 3310:3306 
-v /etc/mysql/conf.d 
-v /var/lib/mysql 
-e MYSQL_ROOT_PASSWORD=338218 
--name mysql01 mysql:5.7


docker run -d -p 3311:3306 
-e MYSQL_ROOT_PASSWORD=338218 
--name mysql02 
--volumes-from mysql01 mysql:5.7

# 这个时候可以实现两个容器数据同步

  • 容器之间配置信息的传递,数据卷容器的生命周期这一直持续到没有容器使用为止
  • 但是一旦持久化到了本地,这个时候,本地的数据不会被删除

Dockerfile构建步骤

  1. 编写一个dockerfile文件
vi Dockerfile
FROM centos:7

VOLUME ["volume01","volume02"]

CMD echo "-----------end-------------"
CMD /bin/bash
  1. docker build构建为一个镜像
docker build -f Dockerfile -t centos-test20220527:0.2 .

-f 文件名字
-t 镜像标签
  1. docker run 运行镜像
 docker run -it 3bb636778c29 /bin/bash
## 3bb636778c29 自己构建镜像的ID
  1. docker push发布镜像(DockerHub、阿里云镜像仓库)

Dockerfile命令

FROM  		  # 基础镜像,一切从这里开始
MAINTAINER  # 镜像是谁写的,姓名+邮箱
RUN  		    # 镜像构建的时候需要运行的命令
ADD  		    # 步骤:往里面加东西:tomcat镜像,这个tomcat压缩包,添加内容
WORKDIR 	  # 镜像的工作目录
VOLUME  	  # 挂载的目录
EXPOSE 		  # 暴露端口配置
CMD  		    # 指定容器运行时的shell命令,只有最后一个生效,可被替代
ENTRYPOINT 	# 指定容器运行时的shell命令,可以追加命令
ONBUILD  	  # 当构建一个被继承DockerFile这个时候就会运行ONBUILD的指令,触发指令
COPY  		  # 类似ADD,将我们文件拷贝到镜像中
ENV  		    # 构建的时候设置环境变量

构建属于自己的centos

# 1./home下新建dockerfile目录
mkdir dockerfile

# 2. dockerfile目录下新建mydockerfile-centos文件
vim mydockerfile-centos

# 3.编写Dockerfile配置文件
FROM centos							# 基础镜像是官方原生的centos
MAINTAINER liaobh<7758258@qq.com> 	# 作者

ENV MYPATH /usr/local				# 配置环境变量的目录 
WORKDIR $MYPATH						# 将工作目录设置为 MYPATH

RUN yum -y install vim				# 给官方原生的centos 增加 vim指令
RUN yum -y install net-tools		# 给官方原生的centos 增加 ifconfig命令

EXPOSE 80							# 暴露端口号为80

CMD echo $MYPATH					# 输出下 MYPATH 路径
CMD echo "-----end----"				
CMD /bin/bash						# 启动后进入 /bin/bash

# 4.通过这个文件构建镜像
# 命令: docker build -f 文件路径 -t 镜像名:[tag] .
$ docker build -f mydockerfile-centos -t mycentos:0.1 .

# 5.出现一下文字则构建成功
Successful built xxxxxx
Successful tagged xxxxx

Docker部署Spring Boot应用

  1. mvn package 打Jar包
  2. 编辑Dockerfile
FROM java:8
COPY *.jar /app.jar
CMD ["--server.port=8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","app.jar"]
  1. 将Dockerfile跟jar包上传到服务器上
  2. 构建镜像并启动(注意最后有个 . )
docker build -t xxxxx:xx  .

docker run -it -p:8080:8080 --name=xxx01 xxxxx

实际项目中一般是用gitLab+jenkins自动化部署

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值