Docker笔记

Docker

这是个人笔记,观看他人教学视频整合的,视频底部有链接,侵删。

Docker 应用容器
虚拟机是模拟一个完整的电脑,Docker是模拟其中的一部分。
相比之下,更加快捷。可以直接运行在不同的机器中。
容器之间相互隔离。内核级别的虚拟化。

Docker安装

基于Centos7的安装

Docker基本组成

在这里插入图片描述
镜像(Images):

  • 我将它理解为类似Java中的类。
    有一个class A。我可以new很多A赋值给a1,a2,a3.
    镜像也是如此。可以通过镜像生成多个实例。
    tomcat镜像 = => run = => tomcat01(在容器中)

容器( container):

  • 通过镜像来创建。
    有启动,停止,删除等等基本命令

仓库(repository):

  • 存放镜像的地方,和git差不多。

安装

进入官网。最下方找到文档:
在这里插入图片描述
点击下载:
在这里插入图片描述
点击linux版本:
在这里插入图片描述
找到centos版本

卸载旧Docker

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

然后安装仓库:

$ sudo yum install -y yum-utils
//配置仓库镜像
$ sudo yum-config-manager \
    --add-repo \
	http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新

yum makecache fast

安装Docker相关内容:

yum install docker-ce docker-ce-cli containerd.io

查看是否安装成功:
docker version

启动Docker:
systemctl start docker

运行helloword(一个helloword的镜像):
docker run hello-world
在这里插入图片描述
出现上面这个说明运行成功。

查看当前下载的镜像:
docker images

Docker原理

Docker 在run之后:

  • 在本机寻找是否有该镜像,有则运行
  • 如果没有,在远程仓库中寻找是否有该镜像,没有就报错。
  • 如果有,进行下载。
  • 本地就会有该镜像,运行。

Docker如何工作:
Docker是Server和Client结构。Docker的守护进程(就是那个服务)运行在主机上,客户端通过Socket访问服务。
Server接收到客户端的命令就会访问。
在这里插入图片描述
Docker为什么比虚拟机快:

  • Docker比虚拟机有更少的抽象层
  • Docker用的是宿主机的内核,虚拟机要Guest OS。
    在这里插入图片描述

Docker的常用命令

help
docker version  		#版本信息
docker info      		#显示docker的系统信息(比较详细)
docker --help  #帮助命令

或者去官网看帮助文档

镜像命令

查看本地仓库:

[root@tutulei docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              bf756fb1ae65        6 months ago        13.3kB

REPOSITORY==>镜像仓库源
TAG==>镜像标签
IMAGE ID==>镜像ID
CREATED==>创建时间
SIZE==>大小

搜索:

docker search <name>
在这里插入图片描述

下载镜像:

docker pull
在这里插入图片描述

上图看到,默认下载最新版本。
后面一堆complete就是docker的分层下载(联合文件系统)docker images核心
Digest就是这个镜像的签名
然后是真实地址

下载指定版本:
在这里插入图片描述
可以看到,有一些层次显示exists!!
这里就是docker images高级的地方。他可以共用一些联合文件!!!这可以极大节省docker的空间。

镜像删除

docker rmi

docker rmi -f <镜像id>		#删除指定镜像
docker rmi -f <镜像id> <镜像id> <镜像id> 		#删除多个镜像
docker rmi -f  $(docker images -aq)					#删除所有镜像
$()	#这个括号里面写命令(类似于sql语句查询,然后会删除查询出来的结果)
容器命令

容器通过镜像创建(所以下载一个镜像先):
docker pull centos

新建容器并且启动:
docker run [可选参数] image
#参数说明
--name="Name"		#容器名称
-d								#后台运行
-it								#使用交互方式运行,进入容器查看内容
-p(小p)						#指定容器端口 -p 8080
		-p ip:主机端口:容器端口
		-p	主机端口:容器端口(常用)
		-p 容器端口
		容器端口
-P(大P)					#随机指定端口

测试:

在这里插入图片描述
上面就是启动并且进入了centos容器。
退出只需要输入exit(同步停止容器)。

查看当前正在运行的容器:

docker ps
参数:
-a 显示所有容器(运行中和为运行)
-n=? 显示最近创建的容器?是数目
-q 只显示容器编号

退出容器
exit 退出容器并且停止
Ctrl + P + Q 退出不停止
删除容器
docker rm 容器id				#删除指定容器
docker rm -f $(docker ps -aq)		#删除所有容器
$(查询语句)		
docker ps -a -q|xargs docker rm		#删除所有容器
启动停止容器
docker start 容器id		#启动容器
docker restart 容器id		#重启容器
docker stop 容器id		#停止当前正在运行的容器
docker kill 容器id		#强制停止当前容器
常用其他命令
后台启动容器
docker run -d 镜像名

对于centos这类镜像,运行后,docker ps会找不到运行中的进程。
这是因为,centos容器发现自己没有前台进程,这样会直接kill自己。
查看日志
docker logs --help查看帮助
--tail n #显示最新的n行日志
-t		#显示时间
-f		#持续显示新的日志
#测试:centos写一个while true脚本
docker run -d centos /bin/bash -c "while true;do echo test ;sleep 1;done"
#查看日志
docker logs -tf --tail 1 容器ID

在这里插入图片描述

查看容器的进程信息

docker top 容器ID
在这里插入图片描述

查看镜像/容器的元数据
docker inspect 容器ID/镜像名

测试部分截图:
在这里插入图片描述

进入正在运行的容器!
#新开了一个bash 进程和容器进行交互
docker exec -it 容器ID <bashshell>

#进入centos容器测试:
docker exec -it 7d38cf19296d /bin/bash

#进入容器
docker attach 容器ID		
从容器中拷贝文件到本机

docker cp 容器ID:filename path

#首先查看当前以及存在的容器(无论容器是否运行,容器的数据一直存在)
docker ps -a

#进入容器
docker exec -it 容器ID 

#新建一个test文件
touch test.java

#退出容器
exit

#拷贝文件
docker cp 7d38cf19296d:/home/test.java /home

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

提交镜像(生成新的镜像)
docker commit -m="提交的描述信息" -a="作者" 容器ID 目标镜像名:<TAG>(版本)

或者使用 DockerFile创建镜像。

命令小结图

在这里插入图片描述

容器数据卷
什么是容器数据卷

首先,Docker 是将一个应用和其环境打包成一个镜像。
这时,如果删除了整个容器,那么,容器中的所有数据都会丢失!(正常情况下,像mysql里面的数据需要持久保存)需要数据持久化。能将数据存在本地,而不仅仅在容器中。

容器数据卷就是一个数据共享的技术。Docker容器中产生的数据,同步到本地。
这就是卷技术,目录挂载,将容器中的目录挂载到宿主机上。

容器间也可以数据共享,多容器可以挂载到同目录。
挂载后,目录中的数据是相互同步的。容器内的数据会同步到容器外,容器外的数据会同步到容器内

使用数据卷

命令挂载-v
docker run -it -v 目标主机:容器内目录 centos /bin/bash

mysql挂载例子:

#启动mysql容器并且将配置文件和数据挂载到宿主机
docker run -d -p 3310:3306 -v /home/dockerfile/mysql/conf:/etc/mysql/conf.d -v /home/dockerfile/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name MYSQL01 mysql:5.7

-p 指定端口映射
-d 后台运行
-v 数据卷挂载
-e 添加配置
–name 指定容器名称
(mysql需要设置密码才能运行,其他版本的mysql启动方式可能有所区别)

数据卷挂载方式:

-v 宿主机目录:容器内部目录	#指定路径挂载
-v 容器内路径		#匿名挂载
-v	卷名:容器内路径		#具名挂载

添加权限:

#在-v 添加完数据卷挂载之后加:然后添加权限
ro		#只读
rw	#可读可写
例子:
docker run -d -P --name nginx02 -v hello-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx02 -v hello-nginx:/etc/nginx:rw nginx

-P 是随机映射端口

数据卷容器

命令:
--volumes-from
例子:
docker run -d -P -e MYSQL_ROOT_PASSWORD=123456 --volumes-from mylsq02 --name mysql01 mysql:5.7

笔记来源

该笔记是观看b站up主狂神的视频所记录的。
感谢狂神大佬的分享!
视频链接:https://www.bilibili.com/video/BV1og4y1q7M4

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值