docker概述及使用

1、 docker概述

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。容器是完全使用沙箱机制(隔离机制),相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Docker的应用场景 

  • Web 应用的自动化打包和发布。
  • 自动化测试和持续集成、发布。
  • 在服务型环境中部署和调整数据库或其他的后台应用。

功能

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化

解决产品测试上线部署问题, 实现项目产品和依赖环境统一,通过docker实现开发打爆部署上线,一套流程做完, 实现devops

2、docker安装

docker build | Docker Documentation

C/S结构

镜像 : image

  • 一个只读模板, 一个镜像可以创建出来很多个容器 , 镜像run ---容器
  • 相当于Python当中类与对象的概念,一个类可以实例化出来许多的 obj

容器 : container

  • 独立运行的一个或一组应用, 是由镜像实例化出来的
  • 可以把它看成是一个迷你版的Linux环境 
  • 启动、开始、停止、删除。每个容器都是相互隔离的

仓库 : repository

  • 集中存放镜像文件的场所
  • 仓库有两种区分
仓库注册服务器:
	存放着多个仓库
	
仓库:
     每个仓库包含多个镜像,每个镜像有不同的标签('tag':类似于版本号)
    仓库分为公开仓库(Public)和私有仓库(Private)两种形式
    最大的公开仓库是 "Docker Hub:(https://hub.docker.com/)"

3、docker命令

  镜像命令

1 列出本地主机上的镜像名:
  Docker images
2 从dockerhub上搜索镜像
  Docker search 镜像名
3 下载镜像
  docker pull 镜像名
4 删除镜像
  docker rmi 镜像名ID
5 新建并启动容器
  docker run [OPTIONS] 镜像名 [Command] 参数
  [OPTIONS]说明:
​   --name=“容器名”:为容器指定一个名称;
​   -d:后台运行容器。并返回容器ID(即启动守护式容器);
​   -i:以交互模式运行容器
​   -t:为容器重新分配一个伪输入终端
​   -P:随机端口映射
​   -p:指定端口映射,有四种格式 [ip:hostPort:containerPort; ip::containerPort; 
    hostPort:containerPort; containerPort]


  容器命令

​
1 列出当前所有正在运行的容器

docker ps [OPTIONS]
[OPTIONS]说明:
 -a:列出当前所有正在运行的容器+历史上运行过的
 -l:显示最近创建的容器
​ -n:显示最近n个创建的容器
​ -q:静默模式,只显示容器编号
​ --no-trunc:不截断输出

2 查看docker容器使用资源
docker stats
3 退出容器
​ exit:容器停止退出
​ Ctrl+P+Q:容器不停止退出
4 启动容器
docker start ContainerID
5 重启容器
docker restart ContainerID6
6 停止容器
docker stop ContainerID
7 强制停止容器
docker kill ContainerID
8 删除容器
docker rm ContainerID
docker rm -f$(docker ps -a -q)
9 查看容器日志:
docker logs -f -t --tail 数字 ContainerID
​ -t:加入时间戳
​ -f:跟随最新的日志打印
​ --tail 数字:显示最后多少条
10 查看容器内运行的进程
docker top ContainerID
11 查看容器内部细节:
docker inspect ContainerID
12 进入正在运行的容器并以命令行交互:
docker exec -it ContainerID /bin/bash
docker attach ContainerID
attach:直接进入容器启动命令的终端,不会启动新的进程(不做任何操作)
exec:是在容器中打开新的终端,并且可以启动新的进程(可以做操作,返回结果)
13 从容器内拷贝文件到主机上
docker cp ContainerID:ContainerPath 宿主机Path
14 Docker镜像
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OPTIONS说明:
​ -a:提交镜像的作者
​ -c:使用Dockerfile指令来创建镜像;
​ -m:提交时的说明文字;
​ -p:在commit时,将容器暂停

15 将镜像推送到仓库
1、登录 docker login http://xxxxx.com
2、登录私有hub创建项目 例如项目叫:abc-dev
3、给镜像打tag  docker tag a29d376ad1b9 blackcicada/h4ck3r:1.0
  a29d376ad1b9:IMAGE ID,可以用docker images 查看
  docker.io:私有hub域名
  blackcicada:项目名称
  h4ck3r:镜像名称
  1.0:镜像版本号
4、推送 docker push blackcicada/h4ck3r:1.0

​

4、容器数据卷

为了部分数据是持久化,使得容器之间实现数据共享。

数据卷是宿主机中的一个目录或文件。
当容器目录和数据卷目录绑定后,对方修改会立即同步。
一个数据卷可以在容器之间共享或重用数据,可以同时被多个容器同时挂载。
一个容器也可以被挂载多个数据卷,数据卷的生命周期一直持续到没有容器使用它为止 
容器数据持久化。
外部机器和容器间接通信。
容器之间数据交换。

添加数据卷的方式

1、命令行挂载的方式

docker run -it -v  /宿主机绝对路径目录:  /容器内目录  镜像名

docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名  (read only)

注意事项:

①目录必须是绝对路径。
②如果目录不存在,则会自动创建。
③可以挂载多个数据卷。

eg1: 一个容器挂载一个数据卷

docker run -id --name container_name1 -v /root/data:/root/data_container centos:7

eg2: 两个容器挂载同一个数据卷

docker run -id --name container_name1 -v /root/data:/root/data_container centos:7
docker run -id --name container_name2 -v /root/data:/root/data_container centos:7

数据卷容器

多容器进行数据交换。
多个容器挂载同一个数据卷。
配置数据卷容器
创建启动c3数据卷容器,使用-v参数设置数据卷。
docker run -id -v /volume --name c3 centos:7
  • 创建启动c1、c2容器,使用--volumes-from参数设置数据卷。
docker run -id --volumes-from c3 --name c1 centos:7
docker run -id --volumes-from c3 --name c2 centos:7

 容器间传递共享

1、父容器dc01,在dataVolumeContainer2新增内容
2、 dc02/dc03继承自dc01
3、docker run -it --name dc02 --volumes-from dc01 zzyy/centos

结论:容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止

2、dockerFile的形式添加

5、dockerfile文件

FROM ubuntu:14.04
LABEL maintainer="vincent <jeffmanword@gmail.com>"
RUN apt-get update && apt-get install -y redis-server
EXPOSE 6397
ENTRYPOINT [ "/usr/bin/redis-server" ]

FROM ubuntu:14.04
LABEL maintainer="vincent <jeffmanword@gmail.com>"
RUN apt-get update && apt-get install -y redis-server
EXPOSE 6397
ENTRYPOINT [ "/usr/bin/redis-server" ]

FROM 是 我们选择的 base 基础镜像
LABEL 为 我们需要的标识,比如作者是谁
RUN 是我们 执行的命令,必须使用连接符
EXPOSE 暴漏的端口
ENTRYPOINT 程序的入口
Dockerfile有以下指令选项:

FROM:指定一个基准镜像
MAINTAINER:用于提供镜像作者的详细信息
COPY: 用于将宿主机的文件复制镜像中
ADD :类似于COPY指令,ADD支持tar文件和URL路径自动展开
WORKDIR:设定工作目录
VOLUME:创建一个挂载点目录
EXPOSE:打开指定要监听的端口以实现与外部通信
ENV:用于为镜像定义所需要的环境变量
RUN:指定docker build过程中运行的程序
CMD:用于运行任何命令或应用程序,RUN命令用于运行构建镜像的过程中,而CMD指令时运行基于Dockerfile构建出的新镜像文件启动容器时。
ENTRYPOINT:用于为容器指定默认运行程序,从而使得容器像是一个单独的可执行程序
USER: 指定运行images的用户名或UID,默认的运行用户为root
ONBUILD: 用于在Dockerfile中定义一个触发器

6、docker网络原理

Docker有以下4种网络模式:

host模式:使用 --net=host 指定。
none模式:使用 --net=none 指定。
bridge模式:使用 --net=bridge 指定,默认设置。
container模式:使用 --net=container:NAME_or_ID 指定。

待更新

idea整理docker

docker compose

docker swarm

CI/CD jenkins

docker 集群

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

**星光*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值