赞
踩
官方文档:https://docs.docker.com/docker-for-windows/
【官方文档超级详细】
仓库地址:https://hub.docker.com/
【发布到仓库,git pull push】
b站教程:https://www.bilibili.com/video/BV1og4y1q7M4?
【这个教程非常简洁!且深入!基于企业应用场景!推荐!以下笔记都基于该课程】
linux基本命令,类似cd,mkdir等
一款产品,开发和上线两套环境,应用环境配置费时费力,而且容易出问题
尤其对于机器学习和深度学习的库更是如此,很可能存在版本问题、底层依赖冲突问题
所以发布项目时,不只是一套代码过去,而是代码+环境整体打包过去
所谓开发即运维,保证系统稳定性,提高部署效率
使用Docker后的流程:
开发:建立模型–环境–打包带上环境,即镜像–放到Docker仓库
部署:下载Docker中的镜像,直接运行即可
Docker的思想来自于集装箱,集装箱,对环境进行隔离
Docker通过隔离机制,可以将服务器利用到极致。
2010年,几个搞IT的人,在美国成立一家公司dotCloud
做一些pass的云计算服务
他们将自己的容器化技术命名为Docker
Docker基于Go语言开发
Docker刚刚诞生的时候,没有引起行业的注意,dotCloud活不下去
然后他们决定开源
2013年,创始人将Docker开源,不开则以,一开惊人,刚开源的时候,每个月都会更新一个版本
2014年4月9日,Docker 1.0发布
在容器技术出来之前,用的是虚拟机技术
缺点:
不是模拟的完整的操作系统
比较虚拟机和Docker的不同
传统虚拟机 | Docker | |
---|---|---|
虚拟内容 | 硬件+完整的操作系统+软件 | APP+LIB |
大小 | 笨重,通常几个G | 轻便几个M或KB |
启动速度 | 慢,分钟级 | 快,秒级 |
明确几个概念:
镜像(image):docker镜像好比一个模板,可以通过这个模板来创建容器(container),一个镜像可以创建多个容器,类似Python中的Class
容器(container):类似Python中通过Class创建的实例,Object;容器可以理解为一个简易的系统
仓库(repository):存放镜像的地方,
分为共有仓库和私有仓库
Docker Hub:国外的
阿里云:配置镜像加速
我们要有一台服务器,并且可以操作它
下载CentOS7 https://www.jianshu.com/p/a63f47e096e8
下载VMware 360软件管家下载
VMware配置虚拟机 https://blog.csdn.net/babyxue/article/details/80970526
xshell链接服务器 https://blog.csdn.net/zzy1078689276/article/details/77280814
[root@192 ~]# cd /
[root@192 /]# pwd
/
[root@192 /]# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@192 /]# uname -r
3.10.0-1127.el7.x86_64
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CARW20fR-1637917253225)(Docker.assets/image-20200608091950655.png)]
用户名
密码
查看ip:vmware里面输入,ip addIPr
视频书签,p602:20
https://www.bilibili.com/video/BV1og4y1q7M4?p=6
https://docs.docker.com/engine/install/centos/
# 卸载旧的版本
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SUIfZL9c-1637917253227)(Docker.assets/image-20200608092628498.png)]
# 安装基本的安装包
$ sudo yum install -y yum-utils
!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1iKSfXOA-1637917253228)(Docker.assets/image-20200608093114774.png)]
注意!!下载默认用国外的,太慢不要用!
用国内镜像,百度搜索,docker的阿里云镜像地址
# 不要用官网默认这个!
$ sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo # 默认是国外的
# 换成下面的
$ sudo yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 阿里云镜像
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LLblfejr-1637917253230)(Docker.assets/image-20200616145430166.png)]
直接复制粘贴就OK了
更像软件包索引
yum makecache fast
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lkTRuF9W-1637917253231)(Docker.assets/image-20200616150014082.png)]
没有问题的话就是可以用的
yum install docker-ce docker-ce-cli containerd.io # docker-ce 社区版 ee 企业版
注意这里会有几个个y/n的判断
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-piR4aEgM-1637917253233)(Docker.assets/image-20200616150818860.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6V3fE7B4-1637917253234)(Docker.assets/image-20200616150922549.png)]
要看到Complet再收手!
systemctl start docker # 代表启动成功
docker version
Client: Docker Engine - Community Version: 19.03.11 API version: 1.40 Go version: go1.13.10 Git commit: 42e35e61f3 Built: Mon Jun 1 09:13:48 2020 OS/Arch: linux/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 19.03.11 API version: 1.40 (minimum version 1.12) Go version: go1.13.10 Git commit: 42e35e61f3 Built: Mon Jun 1 09:12:26 2020 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.2.13 GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429 runc: Version: 1.0.0-rc10 GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd docker-init: Version: 0.18.0 GitCommit: fec3683
docker run hello-world
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vziRkdIO-1637917253235)(Docker.assets/image-20200616151641013.png)]
中间一堆是签名信息
run的运行流程图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZxDd8pEv-1637917253237)(Docker.assets/image-20200616161441669.png)]
查看下载的镜像
docker images
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sectfmRk-1637917253239)(Docker.assets/image-20200616151913277.png)]
# 卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
# 删除资源
rm -rf /var/lib/docker # docker 的默认工作路径
支付宝扫码登录,短信验证,确认授权
我有两个问题
阿里云镜像加速必须配置嘛?
哎呦我去: 加速快
哎呦我去: 要是翻墙就无所谓了
这个阿里云必须要买嘛,买哪个,我看阿里云好多产品
哎呦我去:不需要买
哎呦我去:免费的
哎呦我去:阿里云搜索容器服务
哎呦我去:有一个镜像加速
这个地址是哪来的呀
操作
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u5hGUvAo-1637917253240)(Docker.assets/image-20200616154429105.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nL1zkEON-1637917253241)(Docker.assets/image-20200616154455964.png)]
控制台搜索 容器镜像服务
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JLOvB0pY-1637917253242)(Docker.assets/image-20200616155201285.png)]
找到加速地址
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-33OZcflE-1637917253243)(Docker.assets/image-20200616155649476.png)]
sudo mkdir -p /etc/docker # 创建一个陌路
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://uyfgafsw.mirror.aliyuncs.com"]
}
EOF # 编写配置文件
sudo systemctl daemon-reload # 重启服务
sudo systemctl restart docker # 重启docker
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7gav2N1w-1637917253244)(Docker.assets/image-20200616160315298.png)]
Docker是怎么工作的?
Docker是一个Client-Server结构的系统,Docker的守护进程在主机上。通过Socket从客户端访问!
DockerServer接受到Docker-Client的指令,
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dbyiPBhn-1637917253245)(Docker.assets/image-20200616162107363.png)]
Docker为什么比VM快?
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8jP2oDlj-1637917253247)(Docker.assets/image-20200616162302653.png)]
所以说新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统内核,避免引导
docker version # 显示docker的基本信息
docker info # 系统信息,镜像和容器的数量
docker 命令 --help # 全部信息
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AJajmHN9-1637917253248)(Docker.assets/image-20200616163338187.png)]
查看所有本地主机上的镜像
[root@192 ~]# docker images
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-E18L1lAK-1637917253249)(Docker.assets/image-20200616172056530.png)]
# 解释
REPOSITORY # 镜像仓库源
TAG # 镜像的标签
IMAGE ID # 镜像的ID
CREATED # 镜像的创建时间
SIZE # 镜像的大小
--all , -a Show all images (default hides intermediate images) # 显示所有
--digests Show digests
--filter , -f Filter output based on conditions provided
--format Pretty-print images using a Go template
--no-trunc Don’t truncate output
--quiet , -q Only show numeric IDs # 只显示id
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-43bm1f3K-1637917253250)(Docker.assets/image-20200616172651835.png)]
搜索仓库中的镜像,相当于网页搜索
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lv09Mmph-1637917253251)(Docker.assets/image-20200616173009473.png)]
mysql
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ix4y7ubo-1637917253252)(Docker.assets/image-20200616173050756.png)]
docker search mysql
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rKFIb0Um-1637917253253)(Docker.assets/image-20200616173308194.png)]
docker search --help
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KDTCa5Y3-1637917253254)(Docker.assets/image-20200616173740981.png)]
# 解释
Options:
-f, --filter filter Filter output based on conditions provided根据所提供的条件过滤输出
--format string Pretty-print search using a Go template使用Go模板的漂亮打印搜索
--limit int Max number of search results (default 25)搜索结果的最大数目
--no-trunc Don't truncate output 不截断输出
docker search mysql --filter=STARS=3000 # 搜索出Stars大于3000的
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1lAlKtFx-1637917253255)(Docker.assets/image-20200616174440284.png)]
【视频书签,https://www.bilibili.com/video/BV1og4y1q7M4?p=9,13:44,太热了我要缓一缓】
【20200616拳击课回来,好爽,赶紧把这个命令熟悉完】
下载镜像
docker pull mysql # 下载mysql镜像,default tag,默认最新版latest
[root@192 ~]# sudo systemctl daemon-reload [root@192 ~]# sudo systemctl restart docker [root@192 ~]# docker pull mysql Using default tag: latest # 不写tag默认最新版 latest: Pulling from library/mysql 8559a31e96f4: Pull complete # layer 分层下载,docker image的核心 联合文件系统 d51ce1c2e575: Pull complete c2344adc4858: Pull complete fcf3ceff18fc: Pull complete 16da0c38dc5b: Pull complete b905d1797e97: Pull complete 4b50d1c6b05c: Pull complete c75914a65ca2: Pull complete 1ae8042bdd09: Pull complete 453ac13c00a3: Pull complete 9e680cd72f08: Pull complete a6b5dc864b6c: Pull complete Digest: sha256:8b7b328a7ff6de46ef96bcf83af048cb00a1c86282bfca0cb119c84568b4caf6#签名 Status: Downloaded newer image for mysql:latest docker.io/library/mysql:latest # 真实地址 # 即 docker pull mysql # 等价于 docker pull docker.io/library/mysql:latest
# 指定版本下载
docker pull mysql:5.7
版本来自于官网,版本库https://hub.docker.com/_/mysql
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zRcZ5iec-1637917253257)(Docker.assets/image-20200617094339687.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MD6PGwDq-1637917253258)(Docker.assets/image-20200617100948088.png)]
docker images
此时查看镜像,可以看到新下载的两个
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cAsBq8D0-1637917253258)(Docker.assets/image-20200617101105899.png)]
remove images
# 删除一个 可以通过名称 也可以指定id -f表示删除所有
docker rmi -f 9cfcce23593a
# 删除多个 用空格分隔id
docker rmi -f id id id
# 删除所有
docker rmi -f $(docker images -aq) # images -aq就是查所有镜像id,从而递归删除
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O7Lqco9j-1637917253260)(Docker.assets/image-20200617102049613.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cnDwKVJi-1637917253261)(Docker.assets/image-20200617102126526.png)]
说明:有了镜像才能创建容器,linux,下载一个centos镜像来测试学习
docker pull centos
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FtyWhp48-1637917253263)(Docker.assets/image-20200617103406974.png)]
docker run [可选参数] image
# 参数说明
--name=“Name” # 容器名字,用于区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口 如-p 8080::8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口
-p 容器端口
-P 随机指定端口
# 进入
docker run -it centos /bin/bash
# 查看目录
ls
# 退出
exit
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l4wkxI6I-1637917253264)(Docker.assets/image-20200617104004004.png)]
注意这里面主机名,编程了centos的id
这里面就是一个容器,套娃啊
# 查看正在运行的容器
docker ps
# 查看曾经运行的容器
docker ps -a
# 显示最近创建的容器,设置显示个数
docker ps -a - n=?
# 只显示容器的编号
docker ps -aq
[root@192 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@192 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9939864fa2e6 centos "bin/bash" 4 minutes ago Exited (0) 4 minutes ago unruffled_knuth 5f42e9930435 centos "/bin/bash" 8 minutes ago Exited (0) 4 minutes ago lucid_cannon a89ddb393d3d bf756fb1ae65 "/hello" 19 hours ago Exited (0) 19 hours ago gracious_bhabha [root@192 ~]# docker ps -a -n=2 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9939864fa2e6 centos "bin/bash" 6 minutes ago Exited (0) 6 minutes ago unruffled_knuth 5f42e9930435 centos "/bin/bash" 10 minutes ago Exited (0) 7 minutes ago [root@192 ~]# docker ps -aq 9939864fa2e6 5f42e9930435 a89ddb393d3d
# 容器停止退出
exit
# 容器不停止退出 注意必须在英文输入法下,中文输入法不行
Ctrl + P + Q
[root@192 ~]# docker run -it centos /bin/bash
[root@bfcea13c40cd /]# [root@192 ~]# docker ps ##注意这里会自动给个命令,删掉
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bfcea13c40cd centos "/bin/bash" About a minute ago Up About a minute stoic_wilson
edbd9366d959 centos "/bin/bash" 7 minutes ago Up 7 minutes affectionate_bartik
[root@192 ~]# docker exec -it edbd9366d959 /bin/bash ## 再次进入
[root@edbd9366d959 /]# exit ##停止并推出
exit
# 删除指定容器 不能删除正在运行的容器,如果强制删除 rm -f
docker rm 容器id
# 删除所有容器
docker rm -f $(docker ps -aq)
# 删除所有容器
docker ps -a -q|xargs docker rm
[root@192 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bfcea13c40cd centos "/bin/bash" 29 minutes ago Up 29 minutes stoic_wilson
edbd9366d959 centos "/bin/bash" 35 minutes ago Up 35 minutes affectionate_bartik
9939864fa2e6 centos "bin/bash" 48 minutes ago Exited (0) 48 minutes ago unruffled_knuth
5f42e9930435 centos "/bin/bash" 52 minutes ago Exited (0) 49 minutes ago lucid_cannon
a89ddb393d3d bf756fb1ae65 "/hello" 20 hours ago Exited (0) 20 hours ago gracious_bhabha
[root@192 ~]# docker rm 5f42e9930435
5f42e9930435
[root@192 ~]# docker rm edbd9366d959 # 注意正在运行的容器不能删除
Error response from daemon: You cannot remove a running container edbd9366d9596c744dd449119269b04de2f2a494e7fc471f6396bcefd94c33fe. Stop the container before attempting removal or force remove
[root@192 ~]# docker ps -aq # 所有容器id
bfcea13c40cd
edbd9366d959
9939864fa2e6
a89ddb393d3d
[root@192 ~]# docker rm -f $(docker ps -aq) # 全部删除
bfcea13c40cd
edbd9366d959
9939864fa2e6
a89ddb393d3d
docker start
docker restart
docker stop
docker kill
[root@192 ~]# docker run -it centos /bin/bash [root@7b1a7dd10ea4 /]# exit exit [root@192 ~]# docker ps #查看正在运行的 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@192 ~]# docker ps -a # 查看历史运行过的 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7b1a7dd10ea4 centos "/bin/bash" 54 seconds ago Exited (0) 42 seconds ago fervent_mirzakhani [root@192 ~]# docker start 7b1a7dd10ea4 # 启动当前这个容器 container id 粘过 来 7b1a7dd10ea4 [root@192 ~]# docker ps # 查看当前运行容器 发现启动成功 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7b1a7dd10ea4 centos "/bin/bash" 2 minutes ago Up 28 seconds fervent_mirzakhani [root@192 ~]# docker stop 7b1a7dd10ea4 # 停止运行 7b1a7dd10ea4 [root@192 ~]# docker ps # 再次查看 没有这个容器了 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
【视频书签:https://www.bilibili.com/video/BV1og4y1q7M4?p=11,不知不觉搞了一上午了,按部就班学东西的感觉真好,得找时间快点刷完】
docker run -d 镜像名
# 用docker ps 查看的时候 发现停止了
# 后台运行,docker发现前台没有,容器启动后,发现自己没有提供服务,会立刻停止
Last login: Wed Jun 17 19:47:35 2020
[root@192 ~]# systemctl start docker # 关机后重启了,需要启动docker
[root@192 ~]# docker run -d centos # 运行
8ce188e5fee31c2fac93c0a405ee1a95c38dbc50cb47c35b19c0039c27558ded
[root@192 ~]# docker ps -a # 查看正在运行的
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8ce188e5fee3 centos "/bin/bash" 19 seconds ago Exited (0) 18 seconds ago tender_dirac
7b1a7dd10ea4 centos "/bin/bash" 8 hours ago Exited (0) 8 hours ago fervent_mirzakhani
docker logs
docker logs -f -t --tail n 【id】
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cz6ydOXE-1637917253266)(Docker.assets/image-20200617161744298.png)]
[root@192 ~]# docker logs --help Usage: docker logs [OPTIONS] CONTAINER Fetch the logs of a container Options: --details Show extra details provided to logs -f, --follow Follow log output --since string Show logs since timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes) --tail string Number of lines to show from the end of the logs (default "all") -t, --timestamps Show timestamps # 时间戳 --until string Show logs before a timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes)
whiel true;do echo shenzai;sleep
# 运行一个 [root@192 ~]# docker run -it centos /bin/bash [root@c2887d35c71d /]# [root@192 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c2887d35c71d centos "/bin/bash" 57 seconds ago Up 56 seconds vigorous_kare # 查看日志,由于没有运行脚本,所以啥也没显示 [root@192 ~]# docker logs -f -t --tail 10 c2887d35c71d ^C # ctrl+c退出 # 运行centos里面加个脚本 [root@192 ~]# docker run -d centos /bin/sh -c "while true;do echo shenzai;sleep 1;done" cb6d7fbc3f27a064137d58282de97b97365dea2705211ebfbad642079cc1b388 [root@192 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cb6d7fbc3f27 centos "/bin/sh -c 'while t…" 7 seconds ago Up 6 seconds dreamy_almeida c2887d35c71d centos "/bin/bash" 3 minutes ago Up 3 minutes vigorous_kare # 查看日志 发现隔一秒打印一条 [root@192 ~]# docker logs -f -t --tail 10 cb6d7fbc3f27 2020-06-17T12:02:11.293765084Z shenzai 2020-06-17T12:02:12.297675608Z shenzai 2020-06-17T12:02:13.301845582Z shenzai 2020-06-17T12:02:14.304800996Z shenzai 2020-06-17T12:02:15.307130238Z shenzai 2020-06-17T12:02:16.310574235Z shenzai 2020-06-17T12:02:17.312946923Z shenzai 2020-06-17T12:02:18.314841295Z shenzai 2020-06-17T12:02:19.317021705Z shenzai 2020-06-17T12:02:20.319670013Z shenzai 2020-06-17T12:02:21.322651649Z shenzai 2020-06-17T12:02:22.325466918Z shenzai 2020-06-17T12:02:23.327984704Z shenzai 2020-06-17T12:02:24.329656919Z shenzai
[root@192 ~]# docker inspect cb6d7fbc3f27 [ { # 容器的完整id "Id": "cb6d7fbc3f27a064137d58282de97b97365dea2705211ebfbad642079cc1b388", # 创建时间 "Created": "2020-06-17T12:00:50.706906186Z", # 脚本位置 "Path": "/bin/sh", # 运行的脚本 "Args": [ "-c", "while true;do echo shenzai;sleep 1;done" ], "State": { "Status": "running", # 状态,正在运行 "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 1909, # 父进程id "ExitCode": 0, "Error": "", "StartedAt": "2020-06-17T12:00:51.093617477Z", "FinishedAt": "0001-01-01T00:00:00Z" }, # 来源镜像 "Image": "sha256:831691599b88ad6cc2a4abbd0e89661a121aff14cfa289ad840fd3946f274f1f", "ResolvConfPath": "/var/lib/docker/containers/cb6d7fbc3f27a064137d58282de97b97365dea2705211ebfbad642079cc1b388/resolv.conf", "HostnamePath": "/var/lib/docker/containers/cb6d7fbc3f27a064137d58282de97b97365dea2705211ebfbad642079cc1b388/hostname", "HostsPath": "/var/lib/docker/containers/cb6d7fbc3f27a064137d58282de97b97365dea2705211ebfbad642079cc1b388/hosts", "LogPath": "/var/lib/docker/containers/cb6d7fbc3f27a064137d58282de97b97365dea2705211ebfbad642079cc1b388/cb6d7fbc3f27a064137d58282de97b97365dea2705211ebfbad642079cc1b388-json.log", "Name": "/dreamy_almeida", "RestartCount": 0, "Driver": "overlay2", "Platform": "linux", "MountLabel": "", "ProcessLabel": "", "AppArmorProfile": "", "ExecIDs": null, # 主机配置 "HostConfig": { "Binds": null, "ContainerIDFile": "", "LogConfig": { "Type": "json-file", "Config": {} }, "NetworkMode": "default", "PortBindings": {}, "RestartPolicy": { "Name": "no", "MaximumRetryCount": 0 }, "AutoRemove": false, "VolumeDriver": "", "VolumesFrom": null, "CapAdd": null, "CapDrop": null, "Capabilities": null, "Dns": [], "DnsOptions": [], "DnsSearch": [], "ExtraHosts": null, "GroupAdd": null, "IpcMode": "private", "Cgroup": "", "Links": null, "OomScoreAdj": 0, "PidMode": "", "Privileged": false, "PublishAllPorts": false, "ReadonlyRootfs": false, "SecurityOpt": null, "UTSMode": "", "UsernsMode": "", "ShmSize": 67108864, "Runtime": "runc", "ConsoleSize": [ 0, 0 ], "Isolation": "", "CpuShares": 0, "Memory": 0, "NanoCpus": 0, "CgroupParent": "", "BlkioWeight": 0, "BlkioWeightDevice": [], "BlkioDeviceReadBps": null, "BlkioDeviceWriteBps": null, "BlkioDeviceReadIOps": null, "BlkioDeviceWriteIOps": null, "CpuPeriod": 0, "CpuQuota": 0, "CpuRealtimePeriod": 0, "CpuRealtimeRuntime": 0, "CpusetCpus": "", "CpusetMems": "", "Devices": [], "DeviceCgroupRules": null, "DeviceRequests": null, "KernelMemory": 0, "KernelMemoryTCP": 0, "MemoryReservation": 0, "MemorySwap": 0, "MemorySwappiness": null, "OomKillDisable": false, "PidsLimit": null, "Ulimits": null, "CpuCount": 0, "CpuPercent": 0, "IOMaximumIOps": 0, "IOMaximumBandwidth": 0, "MaskedPaths": [ "/proc/asound", "/proc/acpi", "/proc/kcore", "/proc/keys", "/proc/latency_stats", "/proc/timer_list", "/proc/timer_stats", "/proc/sched_debug", "/proc/scsi", "/sys/firmware" ], "ReadonlyPaths": [ "/proc/bus", "/proc/fs", "/proc/irq", "/proc/sys", "/proc/sysrq-trigger" ] }, # 其他配置 "GraphDriver": { "Data": { "LowerDir": "/var/lib/docker/overlay2/3675586ebbd79cd72d2562a90c9380627a331c563724c0dac091f92600af4907-init/diff:/var/lib/docker/overlay2/7f79322e0f58d651a84a555dadd83d92537788172525945d3f538dd95dce336c/diff", "MergedDir": "/var/lib/docker/overlay2/3675586ebbd79cd72d2562a90c9380627a331c563724c0dac091f92600af4907/merged", "UpperDir": "/var/lib/docker/overlay2/3675586ebbd79cd72d2562a90c9380627a331c563724c0dac091f92600af4907/diff", "WorkDir": "/var/lib/docker/overlay2/3675586ebbd79cd72d2562a90c9380627a331c563724c0dac091f92600af4907/work" }, "Name": "overlay2" }, "Mounts": [], # 挂载 # 基本配置 "Config": { "Hostname": "cb6d7fbc3f27", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ], # 基本环境变量,这里没有Java # 基本命令 "Cmd": [ "/bin/sh", "-c", "while true;do echo shenzai;sleep 1;done" ], "Image": "centos", "Volumes": null, "WorkingDir": "", "Entrypoint": null, "OnBuild": null, "Labels": { "org.label-schema.build-date": "20200611", "org.label-schema.license": "GPLv2", "org.label-schema.name": "CentOS Base Image", "org.label-schema.schema-version": "1.0", "org.label-schema.vendor": "CentOS" } }, # 网卡,比如现在用的是桥接的网卡 "NetworkSettings": { "Bridge": "", "SandboxID": "4d701985d7e77aa153790b697b2f38a61e20555c224b7675e4bf650b82799882", "HairpinMode": false, "LinkLocalIPv6Address": "", "LinkLocalIPv6PrefixLen": 0, "Ports": {}, "SandboxKey": "/var/run/docker/netns/4d701985d7e7", "SecondaryIPAddresses": null, "SecondaryIPv6Addresses": null, "EndpointID": "8a6c71e2bafb19ca7dfd85445ccc4bef6d17467360a243d624089e676a24a018", "Gateway": "172.17.0.1", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "IPAddress": "172.17.0.3", "IPPrefixLen": 16, "IPv6Gateway": "", "MacAddress": "02:42:ac:11:00:03", "Networks": { "bridge": { "IPAMConfig": null, "Links": null, "Aliases": null, "NetworkID": "22b0fd2290ccbc4e066a75d3f01bd8bf32ee4352c5bbcfc9f911287219219571", "EndpointID": "8a6c71e2bafb19ca7dfd85445ccc4bef6d17467360a243d624089e676a24a018", "Gateway": "172.17.0.1", "IPAddress": "172.17.0.3", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:11:00:03", "DriverOpts": null } } } } ]
# 停止正在疯狂输出的那个容器
[root@192 ~]# docker stop cb6d7fbc3f27
cb6d7fbc3f27
# 我们通常容器都是使用后台方式运行的e docker exec -it 容器id bashSHELL # 测试 [root@192 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c2887d35c71d centos "/bin/bash" 35 minutes ago Up 35 minutes vigorous_kare [root@192 ~]# docker exec -it c2887d35c71d /bin/bash [root@c2887d35c71d /]# ls bin etc lib lost+found mnt proc run srv tmp var dev home lib64 media opt root sbin sys usr [root@c2887d35c71d /]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 11:57 pts/0 00:00:00 /bin/bash root 14 0 0 12:32 pts/1 00:00:00 /bin/bash root 28 14 0 12:32 pts/1 00:00:00 ps -ef [root@c2887d35c71d /]# c2887d35c71d [root@c2887d35c71d /]# exit exit # 方式二 [root@192 ~]# docker attach c2887d35c71d [root@c2887d35c71d /]# # 区别 # docker exec # 进入容器后开启一个新的终端,可以在里面操作(常用) # docker attach 进入容器正在执行的终端,不会启动新的进程
# 运行 [root@192 ~]# docker run -it centos # ctrl P Q 不关闭退出,查看 [root@0569081aa89c /]# [root@192 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0569081aa89c centos "/bin/bash" 19 seconds ago Up 19 seconds hopeful_chebyshev # 查看主机home下无文件 [root@192 ~]# cd /home [root@192 home]# ls # 进入正在运行的容器 [root@192 home]# docker attach 0569081aa89c # 进入容器home目录 [root@0569081aa89c /]# cd /home # 在目录中创建java文件 [root@0569081aa89c home]# touch test.java # 退出并停止容器 [root@0569081aa89c home]# exit exit # 查看现在运行的容器 [root@192 home]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES # 容器虽然被停止,但是数据都会保留 [root@192 home]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0569081aa89c centos "/bin/bash" 3 minutes ago Exited (0) 8 seconds ago hopeful_chebyshev f589e5684a01 centos "/bin/bash" 44 minutes ago Exited (0) 44 minutes ago cranky_easley cb6d7fbc3f27 centos "/bin/sh -c 'while t…" 54 minutes ago Exited (137) 42 minutes ago dreamy_almeida c2887d35c71d centos "/bin/bash" 58 minutes ago Exited (127) 16 minutes ago vigorous_kare 8ce188e5fee3 centos "/bin/bash" About an hour ago Exited (0) About an hour ago tender_dirac 7b1a7dd10ea4 centos "/bin/bash" 9 hours ago Exited (0) 9 hours ago fervent_mirzakhani # 容器数据拷贝到主机 [root@192 home]# docker cp 0569081aa89c:/home/test.java /home [root@192 home]# ls test.java # 拷贝是一个手动过程,未来我们使用 -v 卷的技术,可以实现自动同步 /home /home
docker stats
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fJFmCdG6-1637917253267)(Docker.assets/image-20200617210554147.png)]
[root@192 home]# docker --help Usage: docker [OPTIONS] COMMAND A self-sufficient runtime for containers Options: --config string Location of client config files (default "/root/.docker") -c, --context string Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default context set with "docker context use") -D, --debug Enable debug mode -H, --host list Daemon socket(s) to connect to -l, --log-level string Set the logging level ("debug"|"info"|"warn"|"error"|"fatal") (default "info") --tls Use TLS; implied by --tlsverify --tlscacert string Trust certs signed only by this CA (default "/root/.docker/ca.pem") --tlscert string Path to TLS certificate file (default "/root/.docker/cert.pem") --tlskey string Path to TLS key file (default "/root/.docker/key.pem") --tlsverify Use TLS and verify the remote -v, --version Print version information and quit Management Commands: builder Manage builds config Manage Docker configs container Manage containers context Manage contexts engine Manage the docker engine image Manage images network Manage networks node Manage Swarm nodes plugin Manage plugins secret Manage Docker secrets service Manage services stack Manage Docker stacks swarm Manage Swarm system Manage Docker trust Manage trust on Docker images volume Manage volumes Commands: attach Attach local standard input, output, and error streams to a running container build Build an image from a Dockerfile commit Create a new image from a container's changes cp Copy files/folders between a container and the local filesystem create Create a new container diff Inspect changes to files or directories on a container's filesystem events Get real time events from the server exec Run a command in a running container export Export a container's filesystem as a tar archive history Show the history of an image images List images import Import the contents from a tarball to create a filesystem image info Display system-wide information inspect Return low-level information on Docker objects kill Kill one or more running containers load Load an image from a tar archive or STDIN login Log in to a Docker registry logout Log out from a Docker registry logs Fetch the logs of a container pause Pause all processes within one or more containers port List port mappings or a specific mapping for the container ps List containers pull Pull an image or a repository from a registry push Push an image or a repository to a registry rename Rename a container restart Restart one or more containers rm Remove one or more containers rmi Remove one or more images run Run a command in a new container save Save one or more images to a tar archive (streamed to STDOUT by default) search Search the Docker Hub for images start Start one or more stopped containers stats Display a live stream of container(s) resource usage statistics stop Stop one or more running containers tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE top Display the running processes of a container unpause Unpause all processes within one or more containers update Update configuration of one or more containers version Show the Docker version information wait Block until one or more containers stop, then print their exit codes
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NTdigkaf-1637917253268)(Docker.assets/image-20200617210932306.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vf3Rbicq-1637917253270)(Docker.assets/image-20200617211021003.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bkBf54uY-1637917253271)(Docker.assets/image-20200617211039508.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TeP61UBD-1637917253272)(Docker.assets/image-20200618100621199.png)]
# 官网搜索nginx,可以看到帮助文档 # 下载镜像 [root@192 home]# docker pull nginx Using default tag: latest latest: Pulling from library/nginx 8559a31e96f4: Pull complete 8d69e59170f7: Pull complete 3f9f1ec1d262: Pull complete d1f5ff4f210d: Pull complete 1e22bfa8652e: Pull complete Digest: sha256:21f32f6c08406306d822a0e6e8b7dc81f53f336570e852e25fbe1e3e3d0d0133 Status: Downloaded newer image for nginx:latest docker.io/library/nginx:latest # 查看镜像 [root@192 home]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 831691599b88 13 hours ago 215MB nginx latest 2622e6cca7eb 7 days ago 132MB # 运行测试 # -d 后台运行,--name 命名,-p 暴露端口,3344服务器、宿主机的端口,容器内部端口 [root@192 home]# docker run -d --name nginx01 -p:3344:80 nginx 38dbf7bdcaef232d269b7184d91e44e06087181b5ee929494e177ad526810fa8 [root@192 home]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 38dbf7bdcaef nginx "/docker-entrypoint.…" 7 seconds ago Up 6 seconds 0.0.0.0:3344->80/tcp nginx01 # 使用3344可以访问成功 [root@192 home]# curl localhost:3344 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
端口暴露
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-foP2kcF6-1637917253274)(Docker.assets/image-20200617212310709.png)]
可以公网访问
找到服务器地址
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gIdrotcK-1637917253275)(Docker.assets/image-20200617213213721.png)]
浏览器输入 192.168.147.132:3344/
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r3GbV72j-1637917253276)(Docker.assets/image-20200617213142079.png)]
[root@192 home]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 38dbf7bdcaef nginx "/docker-entrypoint.…" 21 minutes ago Up 21 minutes 0.0.0.0:3344->80/tcp nginx01 # 进入容器 [root@192 home]# docker exec -it nginx01 /bin/bash # 查一下nginx在哪 root@38dbf7bdcaef:/# whereis nginx nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx # 到这个目录 root@38dbf7bdcaef:/# cd /etc/nginx root@38dbf7bdcaef:/etc/nginx# ls conf.d koi-utf mime.types nginx.conf uwsgi_params fastcgi_params koi-win modules scgi_params win-utf # 退出 root@38dbf7bdcaef:/etc/nginx# exit exit # 停止 [root@192 home]# docker stop 38dbf7bdcaef 38dbf7bdcaef
再次刷新网页,服务关闭
思考问题:每次改动nginx配置文件,都需要进入容器内部,十分麻烦,要是可以在容器外部提供一个映射路径,达到在容器修改文件名,容器内部就可以自动修改?-v 数据卷技术!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ym5BIiHh-1637917253277)(Docker.assets/image-20200618100551587.png)]
【视频书签:https://www.bilibili.com/video/BV1og4y1q7M4?p=15】
【20200618毕竟生产力工具,加油搞,这周一定刷完!!每次关机都要重连,麻烦(╹▽╹)】
在docker hub上查看版本号和使用方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wcvk82E9-1637917253278)(Docker.assets/image-20200618100319796.png)]
官方文档一定要翻烂,超多版本,我的天呐~
docker run -it --rm tomcat:9.0
# docker run 可以不用pull,能自动下载
# -it 直接进去运行
# --rm 是什么意思?入门的意思?
# 我们之前的启动都是后台,停止了容器之后,容器还是可以查到
# 写了--rm,类似阅后即焚模式,用完即删除,这种通常用来测试
# 最后冒号查好的版本号
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3bXR92ce-1637917253279)(Docker.assets/image-20200618101811914.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ihb3XhPZ-1637917253280)(Docker.assets/image-20200618101849917.png)]
ctrl+c退出
docker ps -a
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KbRfdUTj-1637917253281)(Docker.assets/image-20200618102022167.png)]
可以看到并没有tomcat,印证阅后即焚模式,容器会删除,镜像不会删除
平时不建议这样搞
docker pull tomcat:9.0 # 之前下过了,应该不用下了,这里老师讲错了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8wIUfJI5-1637917253282)(Docker.assets/image-20200618102544564.png)]
# 启动运行,应该加上版本号
docker run -d -p 3355:8080 --name tomcat01 tomcat
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rTjKXH2f-1637917253283)(Docker.assets/image-20200618102837397.png)]
# 进入容器
docker exec -it tomcat01 /bin/bash
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BZGj8UJB-1637917253284)(Docker.assets/image-20200618103109004.png)]
发现问题
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nTG3nzOG-1637917253284)(Docker.assets/image-20200618103407205.png)]
这是阿里云镜像的原因:默认使用最小镜像,所有不必要的都剔除了,保证最小可运行环境
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F37d3UNg-1637917253286)(Docker.assets/image-20200618103848104.png)]
再次找到结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qc8Uh0qx-1637917253287)(Docker.assets/image-20200618104052242.png)]
在浏览器中输入:http://192.168.147.132:3355/
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fWvCWMvo-1637917253288)(Docker.assets/image-20200618103958168.png)]
思考问题:我们以后部署项目,如果每次都要进入容器是不是身份麻烦?我要是可以在容器外部提供一个映射路径,webapps,我们在外部放置项目,就自动同步到内部就好了!
docker容器 tomcat+网站
docker mysql
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fgo2mYQa-1637917253289)(Docker.assets/image-20200618104950722.png)]
# es 暴露的端口很多
# es 十分耗内存
# es 的数据一般需要放置到安全目录!挂载
# 启动 elasticsearch -e设置容器内的环境变量
$ docker run -d --name elasticsearch01 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
# 查看内存占用情况
docker stats
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4IletA2K-1637917253290)(Docker.assets/image-20200618111713885.png)]
# 先感觉stop一下
docker stop ba18713ca536
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B2rleuyE-1637917253291)(Docker.assets/image-20200618105057785.png)]
# 通过 -e 限制内存
$ docker run -d --name elasticsearch02 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS=“-Xms64m -Xmx512m” elasticsearch:7.6.2
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vTwJifIB-1637917253291)(Docker.assets/image-20200618113018622.png)]
没成功啊,SEI能告诉我为啥!!
docker run -d --name elasticsearch02 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2
py0003null大佬:
“ES_JAVA_OPTS=-Xms64m -Xmx512m”py0003null大佬:
引号提前试试
原因是引号!!你没觉得怪怪的嘛
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AQqlA0UU-1637917253292)(Docker.assets/image-20200618115302656.png)]
此时查看stats,发现内存占用在控制范围内
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iSD9qDOG-1637917253293)(Docker.assets/image-20200618115149971.png)]
ctrl + C退出,记得stop
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8rdZDro4-1637917253294)(Docker.assets/image-20200618115921069.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KMBqWN9L-1637917253295)(Docker.assets/image-20200618113556445.png)]
Docker图像化界面管理工具,提供一个后台面板供我们操作!
docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker --privileged=true portainer/portainer
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A64eZTin-1637917253296)(Docker.assets/image-20200618114542622.png)]
访问外网8088
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0eFMRZJ8-1637917253297)(Docker.assets/image-20200618114902169.png)]
用户名
密码
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R9LsVgMP-1637917253298)(Docker.assets/image-20200618134706491.png)]
【中午吃饭重连了一下,失败,不知道发生了啥】
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-stg5hAjr-1637917253299)(Docker.assets/image-20200618135424706.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OJOqXgYf-1637917253300)(Docker.assets/image-20200618135450037.png)]
【平时不会用这个,好吧,先往下】
UnionFS 联合文件系统
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hioXx3Yk-1637917253301)(Docker.assets/image-20200618140242423.png)]
bootfs:boot file system
rootfs:root file system
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hiSGRttp-1637917253302)(Docker.assets/image-20200618140907894.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ro93g5LD-1637917253303)(Docker.assets/image-20200618140932621.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7Cj8xGK5-1637917253303)(Docker.assets/image-20200618141014511.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i7v3cjmA-1637917253304)(Docker.assets/image-20200618153329894.png)]
Docker镜像都是只读的,当容器启动时,一个新的可写层被加到镜像的顶部,这一层就是我们通常说的容器层,容器层之下的都叫镜像层
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pjU4aKTK-1637917253305)(Docker.assets/image-20200618153855605.png)]
docker commit # 提交容器成为一个新的副本
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]
docker images
docker run -it -p 8080:8080 tomcat
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mclvV8z8-1637917253305)(Docker.assets/image-20200618154457286.png)]
这是一个前台程序
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k0aIka1k-1637917253306)(Docker.assets/image-20200618154736475.png)]
将webapps.dist里面所有的文件拷贝到webapps里面,其中-r必须有,表示目录递归拷贝
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CyN373CF-1637917253307)(Docker.assets/image-20200618154943194.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WMQ4j4BI-1637917253308)(Docker.assets/image-20200618155750591.png)]
docker commit -a="paidaxing" -m="add webapps app" 当前容器的id tomcat02:1.0
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LUhBGN5F-1637917253309)(Docker.assets/image-20200618160425265.png)]
发现新的版本,比之前的大了一些,因为里面记录了我们的改动
如果想保存当前容器的状态,可以通过commit提交,获得一个镜像
好比我们以前学习VM的时候的快照
到这里算是入门了
接下来三个部分是docker的精髓
docker是要将应用和环境打包成一个镜像
这样,数据就不应该在容器中,否则容器删除,数据就会丢失,这就是删库跑路
故容器之间要有一个数据共享技术
在Docker容器中产生的数据,同步到本地,这就是卷技术
本质上是一个目录挂载,将容器内的目录挂载到虚拟机上
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ynORB8yY-1637917253311)(Docker.assets/image-20200618162917672.png)]
目的:容器的持久化和同步操作
容器间可以数据共享
方式一:直接使用命令来挂载
docker run -it -v -p
# -it 交互式进入
# -v volume卷技术
# -p 主机端口
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GuKXzbnt-1637917253312)(Docker.assets/image-20200618163659503.png)]
新开一个窗口
docker inspect 容器id
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XBnyA7br-1637917253314)(Docker.assets/image-20200618163938466.png)]
找到挂载信息Mounts
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YurolBqy-1637917253315)(Docker.assets/image-20200618164148642.png)]
测试
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PpWQD0jv-1637917253317)(Docker.assets/image-20200618164818624.png)]
容器停止后,修改主机文件,再启动容器的时候,数据同样改变
双向同步
MySQL的数据持久化命令
docker search mysql
# 拉取
docker pull mysql:5.7
# 挂载
如果一离开是本地有文件先删除以免相互影响
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql5.7
-d 后台运行
-p 端口映射
-v 卷挂载
-e 环境配置 安装启动mysql需要配置密码
--name 容器名字
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EPoV7zeI-1637917253318)(Docker.assets/image-20200618171353336.png)]
链接测试:打开SQLyog
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VjlpTgI6-1637917253319)(Docker.assets/image-20200618173234347.png)]
点 测试链接
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-78WiqaGQ-1637917253320)(Docker.assets/image-20200618173300551.png)]
点 链接
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L77n3kyN-1637917253323)(Docker.assets/image-20200618173729692.png)]
【视频书签:https://www.bilibili.com/video/BV1og4y1q7M4?p=23,有点累了,跟不动了,这两天运动太少了,有点颓】
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-78jxnA1S-1637917253324)(Docker.assets/image-20200618203452205.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gPzaQ2YA-1637917253324)(Docker.assets/image-20200618203744983.png)]
DockerFile使用来构建docker镜像的文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GzHjltgV-1637917253325)(Docker.assets/image-20200618211547398.png)]
kas:
没有安装吧?kas:
安装一下就可以了py9001021曾叙坚:
centos 默认使用vi写内容,vim需要下载py9001021曾叙坚:
是的,需要下载vim才能使用YF:
配置可以改下,字体就很炫酷了都建民:
用vi 试试都建民:
你没有安装vim都建民:
yum install vim都建民:
试试这个命令
yum install vim # 编辑文件的,没有装一下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qazgBtWl-1637917253326)(Docker.assets/image-20200618211516566.png)]
安装完之后就可以运行这个命令了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4Ar1A2Rb-1637917253327)(Docker.assets/image-20200618211803012.png)]
# 镜像是一层一层的,脚本是一行一行的
# 指令都是大写的
# 这里的每个命令可以理解为镜像的一层
FROM centos
VOLUME ["volume01","volume02"] # 再创建镜像的时候就挂载出来
CMD echo "---end---"
CMD /bin/bash
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EbaU2vh6-1637917253328)(Docker.assets/image-20200618211023834.png)]
想保存并退出
Wesley.:
shift 加 冒号
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N2MAV9eD-1637917253329)(Docker.assets/image-20200618211318410.png)]
cat dockerfile1
docker build -f dockerfile1 -t padaxing/centos[这个位置自定义的名字]:1.0 . # 最后的点很重要 镜像名不能有/
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wuDxfE9h-1637917253330)(Docker.assets/image-20200618212936481.png)]
docker images
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5NxPLhdl-1637917253331)(Docker.assets/image-20200618213310752.png)]
启动生成的镜像
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Yi7gjRWk-1637917253332)(Docker.assets/image-20200618220658979.png)]
在容器内部创建一个文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q55flXn5-1637917253333)(Docker.assets/image-20200618221801103.png)]
查看Mounts,Source对应容器外目录,匿名挂载卷
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1AgG783l-1637917253334)(Docker.assets/image-20200618221837895.png)]
测试一下,在container volume01下生成文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SsjokNAX-1637917253335)(Docker.assets/image-20200618222224352.png)]
在主机挂载路径下,也同样生成
【视频书签:https://www.bilibili.com/video/BV1og4y1q7M4?p=25,周日下午,滨江,大雨,本来说这周六刷完的,发现周六啥也干不下去,除了吃就是睡,要么发呆研究小金库】
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kjFXqW5M-1637917253336)(Docker.assets/image-20200621165403842.png)]
看一下有啥images
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2RLVGI0c-1637917253336)(Docker.assets/image-20200621165733780.png)]
启动docker01,用之前建的padaxing/centos 1.0 镜像
docker run -it --name docker01 padaxing/centos:1.0 # 1.0必须写
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gpr45AWG-1637917253337)(Docker.assets/image-20200621170429658.png)]
当前这个ctrl+p+q不停止退出
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yUqqWGe2-1637917253338)(Docker.assets/image-20200621170540593.png)]
依次启动docker02、docker03
docker run -it --name docker02 --volumes-from docker01 padaxing/centos:1.0
docker02继承docker01的volumes
可以验证,在docker01下加一个数据,在docker02下也会出现
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rh9HyANI-1637917253339)(Docker.assets/image-20200621171513650.png)]
创建docker03,同样继承docker01
docker run -it --name docker03 --volumes-from docker01 padaxing/centos:1.0
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tjlu5RAP-1637917253339)(Docker.assets/image-20200621172333639.png)]
在docker03的volume01下建立文件,在docker01的volume01下同样也有
即通过–volumes-from 可以实现不同容器间的数据共享
删除docker01,数据还在
docker rm -f
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SVHBfyQC-1637917253340)(Docker.assets/image-20200621172830779.png)]
可以看到,删除docker01,进入docker02,数据依然在
结论:
容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用位置
但是如果持久化到了本地,即使所有容器删除了,本地数据是不会删除的
是用来构建docker镜像的文件,可以理解为命令参数脚本
构建步骤:
这个写一个项目时一样的
看一下官方的DockerFile
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KSl4MkLV-1637917253341)(Docker.assets/image-20200621174204807.png)]
可以看到官方镜像都是基础包,很多功能没有,我们通常会自己搭建自己的镜像
官方既然可以制作镜像,我们亦可以
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w8bU2F1J-1637917253341)(Docker.assets/image-20200621174948310.png)]
docker是面向开发的,我们以后要发布项目,做镜像,就要编写dockerfile文件,这个文件十分简单!
Docker镜像逐渐成为企业的交付标准,必须掌握!
FROM # 基础镜像 比如centos
MAINTAINER # 镜像是谁写的 姓名+邮箱
RUN # 镜像构建时需要运行的命令
ADD # 添加,比如添加一个tomcat压缩包
WORKDIR # 镜像的工作目录
VOLUME # 挂载的目录
EXPOSE # 指定暴露端口,跟-p一个道理
RUN # 最终要运行的
CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,而且可被替代
ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD # 当构建一个被继承Dockerfile 这个时候运行ONBUILD指定,触发指令
COPY # 将文件拷贝到镜像中
ENV # 构建的时候设置环境变量
Docker Hub中99%的镜像都是从FROM scratch开始的
添加centos7的压缩包
# 创建一个自己的centos
# 进入home目录
cd /home
# 创建一个目录,之后的东西都保存到这里
mkdir dockerfile
# 进入这个目录
cd dockerfile/
# 创建一个dockerfile,名字叫mydockerfile
vim mydockerfile-centos
xshell新开一个界面
# 官方默认centos
docker run -it centos
pwd # 官方默认有pwd命令
vim # 官方默认没有vim命令
ifconfig # 官方默认没有ifconfig命令
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HDatmSGM-1637917253343)(Docker.assets/image-20200621184333206.png)]
回到mydockerfile
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-N0MCM6ll-1637917253344)(Docker.assets/image-20200621184847524.png)]
# 下面给官方centos加上自定义的内容 FROM centos MAINTAINER padaxing<010301200@hai.com> ENV MYPATH /usr/local WORKDIR $MYPATH RUN yum -y install vim RUN yum -y install net-tools EXPOSE 80 CMD echo $MYPATH CMD echo "---end---" CMD /bin/bash 这里的ENV 设置的是进入的时候的目录 工作目录
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3YJnPP5K-1637917253344)(Docker.assets/image-20200621185539523.png)]
ESC, shif + : 输入wq保存并退出
如果写错了需要修改、
vim mydockerfile-centos
# 进入之后按i或者INSERT键即可修改
下面通过这个这个文件创建镜像
docker build -f dockerfile-centos -t mycentos:0.1 .
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7eie9wob-1637917253345)(Docker.assets/image-20200621190219978.png)]
依次执行命令
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8nIn5XfV-1637917253346)(Docker.assets/image-20200621190439448.png)]
最终返回Successfully表示成功
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aYsgpOht-1637917253347)(Docker.assets/image-20200621190524848.png)]
docker run -it mycentos:0.1 # 版本号必须写,不然他会去找最新的
pwd
vim
ifconfig
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h408NYyh-1637917253348)(Docker.assets/image-20200621190812481.png)]
这时可以看到这些功能都有了
可以通过查看docker构建历史
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EW0twZEz-1637917253349)(Docker.assets/image-20200621192103460.png)]
可以看到当前这个镜像是怎么一步一步构建起来的
我们平时拿到一个镜像也可以通过这个方法研究一下他是怎么做的
【视频书签,https://www.bilibili.com/video/BV1og4y1q7M4?p=29,雨终于停了,想去江边跑步】
FROM centos
CMD ["ls","-a"] # 启动centos展示目录
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O0JnkhWJ-1637917253349)(Docker.assets/image-20200622075427103.png)]
测试ENTRYPOINT
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oXelDtuy-1637917253350)(Docker.assets/image-20200622075653789.png)]
run的时候可以直接加命令
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0grLop4A-1637917253351)(Docker.assets/image-20200622075802180.png)]
Docker中许多命令都十分相似,我们需要了解他们的区别,最好的方式就是这样对比测试
【视频书签,https://www.bilibili.com/video/BV1og4y1q7M4?p=30,这节有点长,这个jar包是哪来的,晚上再搞,先去该模型比较急,还有10节课,这周争取都看完】
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eyndUEmU-1637917253351)(Docker.assets/image-20200616200418271.png)]
Connecting to 192.168.147.131:22...
Could not connect to '192.168.147.131' (port 22): Connection failed.
注:电脑休眠重启后,机子会断开,要重新在vmware里面输入ip addr 获得ip
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Uey6CQA3-1637917253352)(Docker.assets/image-20200616200344918.png)]
修改xshell中的主机接口即可
![image-20200616200505065](Docker.assets/image-20200616200505065.png
hell
docker run -it centos
pwd # 官方默认有pwd命令
vim # 官方默认没有vim命令
ifconfig # 官方默认没有ifconfig命令
[外链图片转存中...(img-HDatmSGM-1637917253343)] 回到mydockerfile [外链图片转存中...(img-N0MCM6ll-1637917253344)] ```shell # 下面给官方centos加上自定义的内容 FROM centos MAINTAINER padaxing<010301200@hai.com> ENV MYPATH /usr/local WORKDIR $MYPATH RUN yum -y install vim RUN yum -y install net-tools EXPOSE 80 CMD echo $MYPATH CMD echo "---end---" CMD /bin/bash 这里的ENV 设置的是进入的时候的目录 工作目录
[外链图片转存中…(img-3YJnPP5K-1637917253344)]
ESC, shif + : 输入wq保存并退出
如果写错了需要修改、
vim mydockerfile-centos
# 进入之后按i或者INSERT键即可修改
下面通过这个这个文件创建镜像
docker build -f dockerfile-centos -t mycentos:0.1 .
[外链图片转存中…(img-7eie9wob-1637917253345)]
依次执行命令
[外链图片转存中…(img-8nIn5XfV-1637917253346)]
最终返回Successfully表示成功
[外链图片转存中…(img-aYsgpOht-1637917253347)]
docker run -it mycentos:0.1 # 版本号必须写,不然他会去找最新的
pwd
vim
ifconfig
[外链图片转存中…(img-h408NYyh-1637917253348)]
这时可以看到这些功能都有了
可以通过查看docker构建历史
[外链图片转存中…(img-EW0twZEz-1637917253349)]
可以看到当前这个镜像是怎么一步一步构建起来的
我们平时拿到一个镜像也可以通过这个方法研究一下他是怎么做的
【视频书签,https://www.bilibili.com/video/BV1og4y1q7M4?p=29,雨终于停了,想去江边跑步】
FROM centos
CMD ["ls","-a"] # 启动centos展示目录
[外链图片转存中…(img-O0JnkhWJ-1637917253349)]
测试ENTRYPOINT
[外链图片转存中…(img-oXelDtuy-1637917253350)]
run的时候可以直接加命令
[外链图片转存中…(img-0grLop4A-1637917253351)]
Docker中许多命令都十分相似,我们需要了解他们的区别,最好的方式就是这样对比测试
【视频书签,https://www.bilibili.com/video/BV1og4y1q7M4?p=30,这节有点长,这个jar包是哪来的,晚上再搞,先去该模型比较急,还有10节课,这周争取都看完】
[外链图片转存中…(img-eyndUEmU-1637917253351)]
Connecting to 192.168.147.131:22...
Could not connect to '192.168.147.131' (port 22): Connection failed.
注:电脑休眠重启后,机子会断开,要重新在vmware里面输入ip addr 获得ip
[外链图片转存中…(img-Uey6CQA3-1637917253352)]
修改xshell中的主机接口即可
![image-20200616200505065](Docker.assets/image-20200616200505065.png
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WgsR0Lp6-1637917253353)(Docker.assets/image-20200624101454866.png)]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。