docker学习

1.将镜像 runoob/ubuntu:v3 生成 test.tar 文档
docker save -o test.tar runoob/ubuntu:v3
2.docker load 命令,可导入镜像文件 *.tar ,该文件一般由 docker save 命令进行镜像导出的。
docker load -i test.tar

docker组成

镜像(image):可以通过镜像创建容器服务
容器(container):独立运行一个或一组应用
仓库(repositoy): 存放镜像的地方
Docker帮助命令
docker version 查看docker版本信息
docker info 查看Docker的系统信息镜像和容器的信息
docker --help docker帮助
https://docs.docker.com/reference/
卸载docker
卸载依赖:
yum remove docker ce docker-ce-cli containerd.io
删除资源
rm -rf /var/lib/docker

镜像命令

查看所以本地主机上的镜像:docker images
注释:
REPOSITORY TAG IMAGE ID CREATED SIZE
镜像仓库源 标签 镜像id 创建镜像时间 大小
-a #列出所有镜像
-q #只显示镜像id
查找镜像
docker search
docker search mysql --filter=STARS=11404 过滤查找
下载镜像分层下载
docker pull mysql默认最新版本
docker pull mysql:5.7 下载5.7版本的mysql
删除镜像
docker rmi -f [镜像id]
rmi -f $(docker images -aq) 迭代删除全部容器

容器命令

启动容器
docker run [镜像]
–name=“name” 用来区分名字容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器唯一端口 -p 8080:8080 主机端口:容器端口(常用)
docker run -it centos:7 /bin/bash 启动centos并进入容器
停止并退出容器
exit 停止并退出容器
Ctrl + p + q 退出不停止
查看启动中的容器
docker ps
-a 查看启动过全部的容器+正在运行的容器
-n 显示最近创建的容器 -a -n=1
-q 只显示容器的编号 -aq当前所有运行容器的编号
删除容器
docker rm [容器id]
-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停止了
常见的坑:docker 容器使用后台运行就必须要有前台进程,docker发现没有应用就会自动停止
查看日志
docker logs -tf显示日志 --tail number 要显示的日志长度 (docker logs - tf --tail 50 容器id)

查看容器的进程信息
docker top [容器id]

查看容器的元数据
docker inspect [容器id]

进入当前正在运行的容器
通常都是使用后台方式运行,需要进行容器进行修改配置
第一种 docker exec -it [容器id] 进入容器后开启一个新的终端
第二种 docker attach [容器id] 进入容器正在执行的终端,不会启动新的进程

从容器内文件拷贝到主机上(拷贝是手动)
docker cp 容器id:容器内路径 目的的主机路径
docker run -d(后台运行) --name 命名 -p 3344:80(暴露宿主机端口:容器内部端口)
查看CPU的状态
docker stats
docker 查看容器
docker inspect 容器id
可视化
安装portainer(可视化工具)
docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock --restart=always --name prtainer portainer/portainer

commit镜像(像快照一样)
修改镜像后
docker commit 提交容器成为一个新的镜像
docker commit -m=“提交的描述信息” -a=“作者” 容器ID 目标镜像名:[tag版本]

容器数据卷挂载(mysql)(将容器的目录挂载到linux上边)

docker理念:将应用和环境打包成一个镜像
需求:数据可持久化(如果数据在容器中,删除容器将数据全部丢失)
作用:mysql数据可以存储到本地,容器之间可任意有一个共享的技术,docker容器中产生的数据同步到本地,(容器的持久化和同步操作)
docker run -it -v 主机目录 容器目录
docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
-d 后台运行
-p 端口映射
-P 随机映射
-v 数据卷挂载
-e 配置
–name 起别名
如何确定是匿名挂载还是具名挂载,指定路径挂载
-v 容器内路径---------匿名挂载
-v 卷名/容器内路径-------------具名挂载:
-v /宿主机路径::容器内路径-----------指定路径挂载
所有docker容器内的卷,没有指定目录的情况下都是在/var/lib/docker/volums/xx/_data

docker run -d -p --name ll -v ll:/etc/nginx:ro ngnix 只读 这个路径只能通过宿主机来操作,容器内无法操作
docker run -d -p --name ll -v ll:/etc/nginx:rw ngnix 可读可写

查看所以volums的情况
docker volums ls

数据卷容器:容器之间配置信息的传递,数据卷容器的生命周期一致持续到没有容器使用为止
多个容器同步
1.启动自己的容器镜像
docker run -it --name centos01 lyq/centos:1.0
2.启动第二个容器事 绑定 centos01
–voiumes-from ->数据卷绑定,实现容器间的数据共享
docker run -it --name centos02 --volumes-from centos01 lyq/centos
数据库同步
docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
docker run -d -p 3307:3307 -e MYSQL_ROOT_PASSWORD=123456 --name mysql03 --volumes-from mysql01 mysql:5.7

DockerFile(构建镜像):命令脚本

dockerfile:构建文件,定义了一切的步骤,源代码
dockerimages:通过dockerfile构建生成的镜像最终发布运行的产品
docker容器:容器就是镜像运行起来提供服务器

dockerfile指令

FROM -> 基础镜像(scratch最基础的镜像)
MAINNTAINER->作者 ,姓名+邮箱
RUN ->构建镜像时需要用到的命令
ADD ->copy文件,会自动解压
WORKDTER ->镜像的工作目录
VOLUME -> 挂载的目录
EXPOSE ->暴露端口
CMD ->指定这个容器启动运行的命令,只有最后一个会被生效,可被代替
ENTRYPOINT->指定这个容器启动的时候运行的命令,可以追加命令
ONBUID ->当构建一个被继承DockerFile 会运行ONBUID
COPY ->类似ADD ,将文件拷贝到镜像
ENY ->构建的时候设置环境变量

在这里插入图片描述

步骤:

1.通过脚本生产镜像
编写dcokerfime文件: vim dockerfile
(1)文件中的内容:指令(大写) 参数,每一个命令就是镜像的一层
(2)执行从上到下顺序执行
(3)#表示注释
(4)每个指令都会创建一个新的镜像层,并提交
FROM centos
VOLUME [“volume01”,“volume02”] 卷挂载 匿名挂载
CMD echo “--------end-----”
CMD /bin/bash
2.构建镜像
#docker build -f dockerfile文件路径 -t 镜像名:版本号
docker build -f /home/docker-test-volume/dockerfile -t lisa/centos:1.0 .
3.运行镜像
4.docker push 推送镜像到dockerhub
创建一个dockerfile文件
指令都是大写 自上倒下执行

编写Tomcat镜像

vim Dockerfile #编写Dockerfile文件
FROM centos #基于centos运行
MAINTAINER ly1 #填写作者
ADD jdk压缩包 /user/local #导入jdk压缩包到/user/local目录下 ADD命令会自动压缩
ADD tomcat压缩包 /user/local #导入Tomcat压缩包到/user/local目录下 ADD自动压缩
RUN yum -y install vim #安装 vim
ENV MYPATH /user/local #设置环境变量
WORKDTER $MYPATH #设置工作目录
ENV JAVA_HOME /user/local/jdk1.8.0_ll#配置Java环境变量

EXPOSE 8080 #暴露8080
CMD /user/local/…/xxx.sh #启动Tomcat

dokcer 网络

理解docker 0

使用evth-pair来进行虚拟机和容器的的连接,evth-pair充当一个桥梁

docker network inspect [网络]

–link

比如有两个容器,容器之间需要连接,不通过网桥(evth-pair)

例子:

Tomcat 01 Tomcat 02 Tomcat 03

如下连接两个容器可以使用下面命令

docker run -d -P --name tomcat03 --link tomcat02 tomcat

docker exec -it tomcat03 ping tomcat02 则可以ping通

通过link可以不使用IP则可以ping通

但是03可以ping通02,02确不能ping通03,反向无法ping通

自定义网络

docker网络

当 Docker 启动时,会自动在主机上创建一个 docker0 虚拟网桥,实际上是 Linux 的一个 bridge,可以理解为一个软件交换机。它会在挂载到它的网口之间进行转发。
io本机回环地址
eth0:阿里云内网地址
docker0: docker 地址(充当路由器)

(网卡)evth-pair 技术,是虚拟的设备接口都是成对存在的(一端连接这协议,一端彼此相连就可以进行通信了)
evth-pair 技术,充当桥梁来连接虚拟的网络设备
docker容器的连接,都是使用evth-pair 技术(成对出现)
docker运用的是Linux的桥接,宿主机中是一个docker容器的网桥 docker0 可以分配65535
docker总所有的网络接口都是虚拟的:转发效率高

在这里插入图片描述

–driver bridge

–subnet 192.168.0.0/16

–gateway 192.168.0.1

创建一个网络

docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

利用创建的网络mynet启动容器tomcat

  1. docker run -d -P --name tomcat01 --net mynet tomcat

  2. docker run -d -P --name tomcat02 --net mynet tomcat

当使用自定义的网络情况下,双方两个容器tomcat01和tomcat02可以相互ping通

docker exec -it tomcat01 ping tomcat02

网络连通
通过–link来解决网络连通问题
创建一个docker0 的tomcat03’
docker run -d -P --name tomcat03
将一个容器连接到一个网络上
docker network connect mynet tomcat03

Docker Compose

Compose是docker官方的开源项目.需要安装

安装 curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.4/docker-compose-uname -s-uname -m > /usr/local/bin/docker-compose

修改权限 chmod +x /usr/local/bin/docker-compose

测试安装成功:docker-compose -version

参考官网 :Get started with Docker Compose | Docker Documentation

了解docker-compose.yml

version :"" #版本

servers : #服务

服务1: #Redis

#docker 服务

images

build

network

服务2: …

Docker底层原理

docker的工作原理:是一个c/s结构系统,docker的守护进程运行在主机上,通过socket从客户端进行访问
dockerserver接收到client的指令就会去执行

docker为什么比vm快

1.Docker有着比虚拟机更少的抽象层,由于Docker不需要Hypervisor实现硬件资源虚拟化,运行在Docker容器上的程序直接使用的都是实际物理机的硬件资源,因此在Cpu、内存利用率上Docker将会在效率上有明显优势。

2.Docker利用的是宿主机的内核,而不需要Guest OS,因此,当新建一个容器时,Docker不需要和虚拟机一样重新加载一个操作系统,避免了引导、加载操作系统内核这个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,这个新建过程是分钟级别的,而Docker由于直接利用宿主机的操作系统则省略了这个过程,因此新建一个Docker容器只需要几秒钟。
在这里插入图片描述

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值