Docker笔记

镜像

    #获取镜像
    docker pull dl.dockerpool.com:5000/ubuntu: 14.04 
    #不加仓库,默认从Docker Hub下载,不加版本,默认版本为latest
    docker pull ubuntu #从Docker Hub下载ubuntu最新镜像

    #查看本地主机已有的镜像信息
    docker images

    #方便后续使用,可以为本地镜像添加标签
    docker tag dl.dockerpool.com:5000/ubuntu:14.04 ubuntu:latest

    #查看镜像详细信息
    docker inspect $(image ID)
    #用-f参数来指定查看镜像的具体某一个信息:
    docker inspect -f {{.Architecture}} $(image ID)

    #搜寻镜像
    docker search mysql #默认从Docker Hub搜索镜像

    #删除镜像
    docker rmi IMAGE #IMAGE可以为tag标签,也可以为镜像ID,使用标签时,只是删除指定标签,并不影响镜像本身
    #强制删除
    docker rmi -f IMAGE

    ###创建镜像
    #基于已有镜像的容器创建:
    docker commit -m 'Add a new file' -a 'Docker Zhu' $(container id) test

    #基于本地模板导入
    cat ubuntu-14.04-x86_64-minimal.tar.gz |docker import -ubuntu:14.04

    ###新建镜像
    #存出镜像到本地文件
    docker save -o centos.tar centos:latest
    #导入本地镜像文件到本地镜像库
    docker load --input centos.tar 
    docker load < centos.tar

#Docker如何push镜像到docker hub个人的仓库(private)
    #step1——找到本地镜像的ID:docker images
    #step2——登陆Hub:docker login --username=username --password=password --email=email
    #step3——tag:docker tag <imageID> <namespace>/<image name>:<version tag eg latest>
    #step4——push镜像:docker push <namespace>/<image name>

容器

    #创建容器
    docker create -it ubuntu:14.04 #docker create创建的容易处于停止状态
    #启动停止的容器
    docker start $(container id)

    #查看容器信息
    docker ps

    #基于镜像创建一个容器并启动
    docker run centos #相当于docker create和docker start
    docker run -t -i ubuntu:14.04 /bin/bash
    #-t 让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上; -i 让容器的标准输入打开; -d 让容器以守护态运行
    #--rm 容器终止和会立即删除,不能喝-d同时使用
    #退出容器:Ctrl+D 或者输入exit

    #终止容器
    docker stop $(container id)
    docker kill #命令会直接发送SIGKILL信号来终止容器

    #将一个运行态的容器终止,并重新启动它
    docker restart $(container id)

    #查看处于终止状态的容器信息
    docker ps -a -q

    #进入容器
    docker attach $(container name)
    #在容器内运行命令
    docker exec -ti &(container id) /bin/bash     #进入刚创建的容器,并启动一个bash

    #删除容器
    docker rm   $(container id)
    #-f 强行终止并删除一个容器; -l 删除容器的连接,但保留容器; -v 删除容器挂载的数据卷

    #导出一个已经创建的容器到一个文件
    docker export $(container id) > 文件名.tar
    #导入本地容器文件成为镜像
    cat test.tar | docker import -test/ubuntu:v1.0

仓库

    #使用registry镜像创建私有仓库
    docker run -d -p 5000:5000 registry  #在本地启动一个私有仓库,监听端口为5000,默认情况下,会将仓库创建在容器的/tmp/registry目录下

    #使用-v参数将镜像文件存放在指定的目录下:
    docker run -d -p 5000:5000 -v opt/data/registry:/tmp/registry registry  #将上传的镜像放在opt/data/registry目录下

    #上传镜像
    docker push IMAGE #配置好私有仓库后,就可以上传镜像到私有仓库

数据卷

    #在容器内创建一个数据卷
    docker run -d --name test -v /dbdata ubuntu  #-v 可以在容器中创建一个数据卷

    #创建一个数据卷容器testdb,并在其中创建一个数据卷挂载到/dbdata
    docker run -it -v /dbdata -name testdb ubuntu

    #在其他容器中使用--volunmes-from来挂载testdb的数据卷
    docker run -it --volumes-from testdb --name db1 ubuntu
    #此时任何一方在目录下写入,其他容器都能看到

    #利用数据卷容器迁移数据
    #备份
    docker run --volumes-from testdb -v $(pwd):/backup --name worker ubuntu
    #--volumes-from testdb挂载testdb的数据卷; $(pwd):/backup挂载本地的当前目录到容器的/backup
    tar cvf /backup/backup.tar /dbdata  
    #worker容器启动会,将/dbdata内容备份到容器/backup/backup.tar,即宿主机的backup目录下

    #恢复
    #先创建一个带有数据卷的容器
    docker run -v /dbdata --name testdb2 ubuntu /bin/bash
    #创建一个新的容器,挂载testdb2的容器
    docker run --volumes-from testdb2 -v $(pwd):/backup --name test ubuntu
    tar xvf /backup/backup.tar 解压

网络基础配置

    #端口映射访问内部容器
    docker run -d -P centos
    #使用-P(大写)标记时,Docker会随机映射一个49000-49900的端口至容器内部开放的网络端口,访问宿主机映射端口即可访问容器内部应用
    #使用-p(小写),可以指定要映射的端口 docker run -d -p 5000:5000 -p 3000:50 centos

    #映射宿主机5000端口到容器5000端口,可以使用多个-p绑定多个端口
    #支持的格式有以下三种:
    #映射指定地址到指定端口
    ip:hostPort:containerPort #如:127.0.0.1:5000:5000
    #映射指定地址的任意端口
    ip::containerPort #本地主机会自动分配一个端口,如:127.0.0.1::5000
    #映射所有接口地址
    hostPort:containerPort #此时默认绑定本地所有接口上的所有地址如:5000:5000

    #查看映射端口配置
    docker port $(container name) 端口

    #容器有自己内部的网络和ip地址,查看信息
    docker inspect $(container id)

    #容器互连
    docker run -d -P --name test --link testdb:db ubuntu
    #--link参数格式为name:alias 其中name是要连接的容器名称,alias是这个连接的别名

使用Dockerfile创建镜像

Dockerfile指令:

(1) FROM(指定基础image)
构建指令,必须指定且需要在Dockerfile其他指令的前面。后续的指令都依赖于该指令指定的image。
FROM指令指定的基础image可以是官方远程仓库中的,也可以位于本地仓库。
该指令有两种格式:
    FROM <image>  
    指定基础image为该image的最后修改的版本。
    FROM <image>:<tag>  
    指定基础image为该image的一个tag版本。
(2) MAINTAINER(用来指定镜像创建者信息)
格式:MAINTAINER <name>  将image的制作者相关的信息写入到image中。
当我们对该image执行docker inspect命令时,输出中有相应的字段记录该信息。
(3) RUN(安装软件用)
RUN可以运行任何被基础image支持的命令。如基础image选择了ubuntu,那么软件管理部分只能使用ubuntu的命令。
格式: 
    RUN <command>  在shell终端运行指令
    RUN ["executable", "param1", "param2" ... ] 使用exec执行
(4) CMD(设置container启动时执行的操作)
用于container启动时指定的操作。该操作可以是执行自定义脚本,也可以是执行系统命令。
该指令只能在文件中存在一次,如果有多个,则只执行最后一条。
格式:
    CMD ["executable","param1","param2"] 使用exec执行
    CMD command param1 param2 在/bin/sh中执行,提供给需要交互的应用
    CMD ["param1","param2"] 提供给ENTRYPOINT默认参数。ENTRYPOINT指定的是一个可执行的脚本或者程序的路径,
    该指定的脚本或者程序将会以param1和param2作为参数执行。所以如果CMD指令使用上面的形式,那么Dockerfile中必须要有配套的ENTRYPOINT。
(5) EXPOSE
EXPOSE <port> [<port>...]
告诉Docker服务器端暴露的端口号,供互联系统使用
启动容器时需要通过-P,Docker主机会自动分配一个端口转发到指定端口,使用-p,可以具体指定哪个本地端口映射过来
(6) ENV
格式:ENV <key> <value>  设置一个环境变量,会被后续的RUN命令使用,并在容器运行时保持
(7) ADD (从src复制文件到container的dest路径)
格式:ADD <src> <dest>  
<src> 是相对被构建的源目录的相对路径,可以是文件或目录的路径,也可以是一个远程的文件url;
<dest> 是container中的绝对路径
所有拷贝到container中的文件和文件夹权限为0755,uid和gid为0;
如果是一个目录,那么会将该目录下的所有文件添加到container中,不包括目录;
如果文件是可识别的压缩格式,则docker会帮忙解压缩(注意压缩格式);
如果<src>是文件且<dest>中不使用斜杠结束,则会将<dest>视为文件,<src>的内容会写入<dest>;
如果<src>是文件且<dest>中使用斜杠结束,则会<src>文件拷贝到<dest>目录下。
(8) COPY
复制本地主机的<src>为容器的<dest>
格式:COPY <src> <dest>  当使用本地目录为源目录时,推荐使用COPY
(9) ENTRYPOINT (设置容器启动后执行的命令,不可被docker run提供的参数覆盖)
格式:
    ENTRYPOINT ["executable", "param1", "param2"]
    ENTRYPOINT command param1 param2  shell中执行
每个Dockerfile只能有一个ENTRYPOINT,当知道多个ENTRYPOINT时,只执行最后一个。
(10) VOLUME
格式:VOLUME ["/data"]
创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保存的数据
(11) USER
格式:USER daemon
设置启动容器的用户名或UID,默认是root用户。
当服务不需要管理员时,可以通过该命令指定运行用户,并且可以在之前创建做需要的用户
例:RUN groupadd -r postgres && useradd -r -g postgres postgres
需要临时获取管理员权限可以使用gosu,不推荐sudo
(12) WORKDIR
格式:WORKDIR /path/to/workdir 
为后续RUN,CMD,ENTRYPOINT指令配置工作目录
可以使用多个WORKDIR指令,后续命令如果参数是相对路径,则会基于之前的命令指定路径
(13) ONBUILD
格式:ONBUILD <INSTRUCTION>  
ONBUILD 指定的命令在构建镜像时并不执行,而是在它的子镜像中执行。

创建镜像:

指定Dockerfile所在路径为/tmp/docker_builder/,并且希望生成镜像标签为build_repo/first_image,指令如下
docker build -t build_repo/first_image /tmp/docker_builder/
-t可以指定镜像标签
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值