Docker 笔记

0.参考资料(感谢大家的分享):

https://docs.docker.com
https://yeasy.gitbooks.io/docker_practice/content
https://my.oschina.net/huangyong/blog/372491

1.定义

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

2.概念

镜像(Image)是一个特殊的文件系统,提供容器运行时所需的程序、库、资源、配置等配置参数,分层存储。比如 Docker 官方镜像 ubuntu:14.04 包含完整的一套 Ubuntu 14.04 最小系统的 root 文件系统。

容器(Container)是镜像运行时的实体,类似就像是面向对象程序设计中的类和实例的关系。容器可以被创建、启动、停止、删除、暂停等。

仓库(Repository)用于存放镜像,命名规则:ubuntu:14.04 (软件名:版本)(不加版本视为最近版本)。多用户环境:jwilder/nginx-proxy(用户名/软件名)。

3.安装

内核版本 >= 2.6.32-431

查看内核版本:uname -r

升级内核(这里根据自己的操作系统来找版本):

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -ivh http://www.elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm
yum -y --enablerepo=elrepo-kernel install kernel-lt

修改内核配置:vi /etc/grub.conf,将 default=1 修改为 default=0,重启:reboot

安装 Docker (https://docs.docker.com/engine/installation/linux/centos/):

$ sudo yum update

$ sudo tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF

$ sudo yum install docker-engine

$ sudo systemctl enable docker.service

$ sudo systemctl start docker

$ sudo docker run --rm hello-world
4.镜像

搜索镜像:docker search imageName https://hub.docker.com/explore

获取镜像:docker pull [选项] [Docker Registry 地址]<仓库名>:<标签>

例子:$ docker pull ubuntu:14.04

运行镜像:$ docker run -it --name testname --rm ubuntu:14.04 bash

  • -it-i:交互式操作,-t:终端。进入 bash 后,执行一些命令并查看返回结果。
  • --rm:这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除。
  • ubuntu:14.04:这是指用 ubuntu:14.04 镜像为基础来启动容器。
  • bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash

退出容器:exit:退出,停止运行;Ctrl+ p q:退出,不停止运行。

列出本地镜像:docker images

使用 Dockerfile 定制镜像:

创建一个名为 Dockerfile 的文件

FROM nginx
RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html

FROM:指定基础镜像;

RUN:执行命令,RUN

COPY:复制文件。格式:COPY <源路径> <目标路径>

ADD:更高级的复制文件。如果 为一个 tar 压缩文件的话,压缩格式为 gzip , bzip2 以及 xz 的情况
下, ADD 指令将会自动解压缩这个压缩文件到 去。

CMD:容器启动命令。例:CMD ["nginx" "-g" "daemon off;"]

其他命令及讲解:https://yeasy.gitbooks.io/docker_practice/content/image/dockerfile/

执行一次即建立一层,编写原则:实现功能,尽可能简洁。

优秀例子:

FROM debian:jessie
RUN buildDeps='gcc libc6-dev make' \
&& apt-get update \
&& apt-get install -y $buildDeps \
&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-3.2.5.tar.gz" \
&& mkdir -p /usr/src/redis \
&& tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1 \
&& make -C /usr/src/redis \
&& make -C /usr/src/redis install \
&& rm -rf /var/lib/apt/lists/* \
&& rm redis.tar.gz \
&& rm -r /usr/src/redis \
&& apt-get purge -y --auto-remove $buildDeps # 每层末尾执行清除

执行构建命令:docker build -t nginx:v3 .

  • -t:标记来添加 tag ,指定新镜像的仓库名;
  • .: 指定上下问路径,docker 会把上下文路径内容打包发给服务端。

使用 commint 构建镜像:

docker commit -m "jdk-8u112_tomcat-8" -a "Shuai" 4503614af3c3 jdk8_tomcat8

此方式一般用于学习和被入侵后保存现场。会导新致镜像臃肿、不可控。

其它生成镜像的方法:

docker import http://download.openvz.org/template/precreated/ubuntu-14.04-x86_64-minimal.tar.gz openvz/ubuntu:14.04

保存镜像:docker save alpine | gzip > alpine-latest.tar.gz

加载镜像:docker load -i alpine-latest.tar.gz

结合 Linux 命令,从当前机器传输镜像到另一台机器:docker save <镜像名> | bzip2 | pv | ssh <用户名>@<主机名> 'cat | docker load'

删除镜像:docker rmi [选项] <镜像><镜像>可以是镜像短 ID 、镜像长 ID 、镜像名或者镜像摘要。

按条件删除:docker rmi $(docker images -q redis)

5.容器

新建并启动容器:docker run ubuntu:14.04 /bin/echo 'Hello world',输出一个 “Hello World”,之后终止容器。

  • -d:后台运行。

启动已终止容器:docker statr id或name

终止容器:docker stop。此外,当通过 exit 命令或 Ctrl+d 来退出终端时,所创建的容器立刻终止。

查看容器:docker ps(启动中);docker ps -a(全部)。

重启容器:docker restart

进入容器:

  • 方式一:docker attach b94d7021d093 /bin/bash
  • 方式二:docker exec -i -t b94d7021d093 /bin/bash

导出容器:docker export 7691a814370e > ubuntu.tar

导入容器:

  • 文件方式:cat ubuntu.tar | sudo docker import - test/ubuntu:v1.0
  • URL 方式:docker import http://example.com/exampleimage.tgz example/imagerepo

    注:用户既可以使用docker load导入镜像存储文件到本地镜像库,也可使用docker import 导入容器快照到本地镜像库。
    镜像存储文件方式将保存完整记录,体积也要大。
    容器快照文件方式将将丢弃所有的历史记录和元数据信息(仅保存容器当时的快照状态),从容器快照文件导入时可以重新指定标签等元数据信息。

删除容器:docker rm trusting_newton。如果要删除一个运行中的容器,可以添加 -f 参数。Docker 会发送 SIGKILL 信号给容器。

终止所有运行中的容器:docker stop $(docker ps -a -q)

清理所有已终止容器:docker rm $(docker ps -a -q)

6.仓库

Docker Hub ( https://hub.docker.com )

登录:

可以通过执行 docker login 命令来输入用户名、密码和邮箱来完成注册和登录。 注册成功后,本地用户目录的 .dockercfg 中将保存用户的认证信息。

从仓库中搜索镜像:docker search centos

下载官方镜像到本地:docker pull centos

向 Docker Hub 推送镜像:docker push mycentos

自动创建

通过 Docker Hub 指定跟踪一个目标网站(目前支持 GitHub 或 BitBucket )上的项目,一旦项目发生新的提交,则自动执行创建。

  • 创建并登录 Docker Hub,以及目标网站;
  • 在目标网站中连接帐户到 Docker Hub;
  • 在 Docker Hub 中 配置一个自动创建;
  • 选取一个目标网站中的项目(需要含 Dockerfile)和分支;
  • 指定 Dockerfile 的位置,并提交创建。

之后,可以 在Docker Hub 的 自动创建页面 中跟踪每次创建的状态。

私有仓库:见参考资料。

7.Docker 数据管理

数据卷:

数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:

  • 数据卷可以在容器之间共享和重用
  • 对数据卷的修改会立马生效
  • 对数据卷的更新,不会影响镜像
  • 数据卷默认会一直存在,即使容器被删除

*注意:数据卷的使用,类似于 Linux 下对目录或文件进行 mount,镜像中的被指定为挂载点
的目录中的文件会隐藏掉,能显示看的是挂载的数据卷。

创建数据卷:

创建一个名为 web 的容器,并加载一个数据卷到容器的 /webapp 目录。

docker run -d -P --name web -v /webapp training/webapp python app.py

删除数据卷:docker rm -v

挂载一个主机目录作为数据卷:

docker run -d -P --name data_share -v /data/heeking/data_share:/home/data_share 镜像

查看数据卷信息:docker inspect web

数据卷容器:

数据卷容器,其实就是一个正常的容器,专门用来提供数据卷供其它容器挂载的。

创建一个名为 dbdata 的数据卷容器:

docker run -d -v /dbdata --name dbdata training/postgres echo Data-only container for postgres

在其他容器中使用 --volumes-from 来挂载 dbdata 容器中的数据卷:

docker run -d --volumes-from dbdata --name db1 training/postgres

可以使用超过一个的--volumes-from 参数来指定从多个容器挂载不同的数据卷。也可以从其他已经挂载了数据卷的容器来级联挂载数据卷:

docker run -d --name db3 --volumes-from db1 training/postgres

*注意:使用 --volumes-from 参数所挂载数据卷的容器自己并不需要保持在运行状态。

*如果删除了挂载的容器(包括 dbdata、db1 和 db2),数据卷并不会被自动删除。如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时使用docker rm -v命令来指定,同时删除关联的容器。

8.使用网络

外部访问容器:

映射到指定地址的指定端口:

docker run -d -p 127.0.0.1:5000:5000 training/webapp

查看映射端口配置:

docker port nostalgic_morse 5000

容器互联:

创建一个新的 web 容器,并将它连接到 db 容器:

docker run -d -P --name web --link db:db training/webapp python app.py

--link参数的格式为:--link name:alias,其中 name是要链接的容器的名称,alias 是这个连接的别名。

高级网络配置:后会有期~

转载于:https://www.cnblogs.com/17003WS/p/6194350.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值