Docker入门

1.Docker的概念

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低

1.1与虚拟机的区别

Docker相对于虚拟机是更"轻量级"虚拟化,目的和虚拟机一样都是创造"隔离环境"。
虚拟机需要创建一层"Guest OS",虚拟机是操作系统级别的隔离,容器本质上是进程级的资源隔离。

1.2.Docker仓库

可以对比与Github,对镜像进行托管,可以从仓库拉取镜像,也可以提交镜像到仓库。 (DockerHub)

1.3.Docker镜像

可以理解为虚拟机的操作系统ISO文件,利用镜像可以很方便的生成容器。

1.4.容器

可以理解为实际运行的虚拟机

1.5.tar文件

可以将镜像 save成tar文件,也可以从tar文件中load镜像,类似于虚拟机的vmdk文件。

在线Docker工具 https://labs.play-with-docker.com/

2.Docker容器使用

2.1容器的启动、关闭

docker run [options] <镜像名称>
-d 后台运行
-p 内外端口映射 90:80 外部90端口映射到容器的80
-P :是容器内部端口随机映射到主机的端口。
-v #指定文件路径映射 宿主机路径:内部路径
-t: 在新容器内指定一个伪终端或终端。
-i: 允许你对容器内的标准输入 (STDIN) 进行交互。
docker start <容器id> 启动一个已停止的容器
docker stop <容器id> 停止容器
docker restart <容器id> 重启容器

2.2 进入容器

docker attach 退回会停止容器
docker exec 退出不会停止容器

2.3 导出容器

docker export <容器ID> > nginx.tar
**docker import **
docker import http://example.com/exampleimage.tgz example/imagerepo #从URL 导入
docker import nginx-test.tar nginx:imp 或 cat nginx-test.tar | docker import - nginx:imp

2.4 查看容器信息

docker logs <容器ID> 查看容器内标准输出
docker top <容器ID> 查看容器内进程
docker inspect <容器ID> 查看dicker底层信息

2.5 删除容器

docker rm <容器ID>

2.6 容器之间的连接

docker run -p 指定内网端口映射
-P :是容器内部端口随机映射到主机的高端口 (49000~49900)
端口映射加上IP
docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py
upd协议
docker run -d -p 127.0.0.1:5001:5000/udp training/webapp python app.py

容器互联
1.创建 network
docker network create -d bridge test-net
-d:参数指定 Docker 网络类型,有 bridge、overlay。
2.启动容器 使用--network 参数
docker run -itd --name test1 --network test-net ubuntu /bin/bash
docker run -itd --name test2 --network test-net ubuntu /bin/bash
3.两个启动的容器内使用ping测试是否互联

配置Docker的DNS
/etc/docker/daemon.json 重启Docker
{
"dns" : [
"114.114.114.114",
"8.8.8.8"
]
}
docker run -it --rm ubuntu cat etc/resolv.conf #查看DNS是否生效

3.Docker镜像使用

docker pull nginx #获取nginx镜像
docker images #查看Docker镜像
docker commit 容器ID 镜像名称 #提交本地容器为镜像
docker build -t 镜像名 DockerFile路径 #通过DockerFile构建Docker镜像
docker save 镜像名 *.tar #将镜像生成tar文件
docker load *.tar
docker rmi #删除镜像
docker search <镜像名> #查找镜像

4.Docker仓库使用

官方维护的仓库DockerHub
docker login #登陆
docker logout #注销
docker search #查找镜像
docker pull #拉取镜像
docker push #推送镜像
docker tag ubuntu:18.04 username/ubuntu:18.04#打标签
docker push username/ubuntu:18.04

5.Docker File使用

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明 文件名严格区分大小写
构建镜像 在DockerFile文件目录下 docker build -t nginx:test

FROM 基于哪个镜像
WORKDIR 指定工作目录 WORKDIR 指定的工作目录,必须是提前创建好的 shell语句运行的目录

RUN 用于执行后面跟着的命令行命令 docker bulid 时运行
CMD 用于执行后面跟着的命令行命令 docker run 时运行
ENTRYPOINT

COPY <源路径> <容器目标路径>
上下文目录中复制文件或者目录到容器里指定路径
ADD 类似于COPY 可以为Url 压缩文件自动解压

ENV 指定环境变量
ARG 指定参数 仅用于build 可以用 --build-arg <参数名>=<值> 来覆盖
LABLE 指定元数据 docker inspect时查看

EXPOSE 暴露端口 docker run -P 随机映射到暴露的端口
VOLUME 定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。容器内的路径

USER 指定运行命令的用户
ONBUILD 用于延迟构建命令的执行 当前镜像构建不会执行 当下次构建以当前镜像为FROM时执行

6.Docker compose使用

Docker Compose 多容器项目
容器之间 内网 互相访问
容器和外部 通过 Docker网卡到宿主机网卡

容器之间相互访问的方法
1.A访问B 进入容器B 查看B的IP 进行访问

2.docker run时 使用 --link 容器名:映射名
docker run -d --link myA:A myB b
在myB容器中使用A 就可以解析到myA容器的IP

3.docker compose
通过docker-compose.yml的配置 来启动并运行多个容器
https://www.bilibili.com/video/av61131351

docker-compose up -d #构建 运行应用程序
https://www.runoob.com/docker/docker-compose.html
容器之间通过docker-compose.yml中的名字即可 互相访问

posted @ 2020-08-07 10:03  ShinyRou  阅读(158)  评论(0编辑  收藏  举报