Docker学习

docker version:查看版本 

Images:Docker镜像,用于创建Docker容器的模板

Container:Docker容器,是独立运行的一个或一组应用

Client:Docker客户端,通过命令行或者其他工具使用Docker API与Docker的守护进程通信。

Host:Docker主机,一个物理或者虚拟的机器用于执行Docker守护进程和容器。

Registry:Docker仓库,用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub提供了很多镜像集合供使用

Machine:Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的 命令行即可在相应的平台安装Docker,比如ViVirtualBox,Digital  Ocean、 Microsoft Azure。

启动后台服务:

sudo service docker start

测试运行:

docker run hello-world

查看正在运行的容器:

docker ps

docker pull training/webapp # 载入镜像

docker run -d -P training/webapp python app.py  运行

docker search  + 容器Id、名字  搜索镜像

        NAME:镜像仓库源的名称

        DESCRIPTION:镜像的描述

        OFFICIAL:是否docker官方发布

docker pull  + 容器名称  获取镜像(从Docker Hub上获取)

docker images 查看本地镜像

docker inspect + ID命令查看容器的信息。

    各个选项说明:

  • REPOSITORY:表示镜像的仓库源

  • TAG:镜像的标签(同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本)

  • IMAGE ID:镜像ID

  • CREATED:镜像创建时间

  • SIZE:镜像大小

docker rm  + 容器Id、名字 删除容器 (删除容器时,容器必须是停止状态,否则会报错误)

docker ps 查看容器

   -a: 命令能查看所有运行的、停止的镜像的命令状态,包含容器名称、镜像名、操作命令等

    -l :查询最后一次创建的容器

docker run + 参数 + 容器名字  运行容器(docker run -d -P training/webapp python app.py)

    -d :让容器在后台运行

   -P:将容器内部使用的网络端口随机映射到主机的高端口上,

   -p : 将容器内部端口绑定到指定的主机端口

docker run -d -p 5000:5000,
docker run -i -t ubuntu:15.10 /bin/bash

    -i:允许你对容器内的标准输入 (STDIN) 进行交互。

 -t:在新容器内指定一个伪终端或终端。

 绑定到指定的IP地址上;

docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py

 默认都是绑定 tcp 端口,如果要绑定 UDP 端口,可以在端口后面加上 /udp

docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py

当我们创建一个容器的时候,docker会自动对它进行命名。另外,我们也可以使用--name标识来命名容器,例如:

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

 完整run命令参数  ,docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

  • -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;

  • -d: 后台运行容器,并返回容器ID;

  • -i: 以交互模式运行容器,通常与 -t 同时使用;

  • -p: 端口映射,格式为:主机(宿主)端口:容器端口

  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

  • --name="nginx-lb": 为容器指定一个名称;

  • --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;

  • --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;

  • -h "mars": 指定容器的hostname;

  • -e username="ritchie": 设置环境变量;

  • --env-file=[]: 从指定文件读入环境变量;

  • --cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;

  • -m :设置容器使用内存最大值;

  • --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;

  • --link=[]: 添加链接到另一个容器;

  • --expose=[]: 开放一个端口或一组端口;

docker run ubuntu:15.10 /bin/echo "Hello world"
  • docker: Docker 的二进制执行文件。

  • run:与前面的 docker 组合来运行一个容器。

  • ubuntu:15.10指定要运行的镜像,Docker首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。

  • /bin/echo "Hello world": 在启动的容器里执行的命令

 

docker port,使用 docker port 可以查看指定 (ID或者名字)容器的某个确定端口映射到宿主机的端口号。

docker logs [ID或者名字] 可以查看容器内部的标准输出。    

     -f:让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出。

docker inspect (ID或名字)查看Docker的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。

docker stop + ID 、名字: 停止容器 

docker start + ID 、名字:启动容器

exit或Ctrl+D退出正在运行的容器

如果仓库里的镜像不能满足我们的需求,可以从已经创建的容器中更新镜像,并提交这个镜像;或使用Dockerfile指令来创建一个新的镜像

1、更新镜像

在运行的容器内使用 apt-get update 命令进行更新。完成后使用exit命令退出容器。

使用docker commit 提交容器副本

docker commit -m="has update"  -a="dongdong"  d0cadf1fdd34 dongdong/ubuntu:16.04-v2

各个参数说明:

  • -m:提交的描述信息

  • -a:指定镜像作者

  • d0cadf1fdd34:容器ID

  • runoob/ubuntu:v2:指定要创建的目标镜像名

docker ps -l 获取容器修改后的信息

 2,构建镜像

   创建static_web文件夹,进入, 创建Dockerfile文件,写入以下命令:

FROM    centos:6.7
MAINTAINER      Fisher "fisher@sudops.com"

RUN     /bin/echo 'root:123456' |chpasswd
RUN     useradd runoob
RUN     /bin/echo 'runoob:123456' |chpasswd
RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE  22
EXPOSE  80
CMD     /usr/sbin/sshd -D

每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。

第一条FROM,指定使用哪个镜像源

RUN 指令告诉docker 在镜像内执行命令,安装了什么

执行命令:docker build -t runoob/centos:6.7 . (注意后面一个英文子字符的‘.’)
  • -t :指定要创建的目标镜像名

  • . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

root@ubuntu:~/static_web# docker build -t test/static_web .
Sending build context to Docker daemon  2.048kB
Step 1/8 : FROM centos:6.7
6.7: Pulling from library/centos
cbddbc0189a0: Pull complete 
Digest: sha256:9587f36d043e0ab9ad0f4c17e3022c360d57b3b970299b3bf7ddd81f0248a60e
Status: Downloaded newer image for centos:6.7
 ---> f2e2f7b8308b
Step 2/8 : MAINTAINER Fisher "fisher@sudips.com"
 ---> Running in c214aa916e6b
Removing intermediate container c214aa916e6b
 ---> afaafcbd3817
Step 3/8 : RUN /bin/echo 'root:123456' |chpasswd
 ---> Running in 029d7fea8073
Removing intermediate container 029d7fea8073
 ---> f075aff20c26
Step 4/8 : RUN useradd dongdong
 ---> Running in 2b74d2a83289
Removing intermediate container 2b74d2a83289
 ---> 4a390d2fe649
Step 5/8 : Run /bin/echo 'dongdong:123456' |chpasswd
 ---> Running in 499b13c25e90
Removing intermediate container 499b13c25e90
 ---> 9ffb64df0f1b
Step 6/8 : EXPOSE 22
 ---> Running in 90d6ba95a040
Removing intermediate container 90d6ba95a040
 ---> 6da670200b8d
Step 7/8 : EXPOSE 80
 ---> Running in 1674e09d5ec7
Removing intermediate container 1674e09d5ec7
 ---> 1520927c3060
Step 8/8 : CMD /usr/sbin/sshd -D
 ---> Running in ea7a4c51018d
Removing intermediate container ea7a4c51018d
 ---> dbca246265f6
Successfully built dbca246265f6
Successfully tagged test/static_web:latest
root@ubuntu:~/static_web# 

 添加标签(tag):

docker tag 860c279d2fec runoob/centos:dev

docker tag 860c279d2fec(ID和昵称) runoob/centos(镜像名):dev(添加的标签名)

docker容器连接

 

docker run  -v $PWD/myapp:/usr/src/myapp  -w /usr/src/myapp python:3.5 python helloworld.py

命令说明:

-v $PWD/myapp:/usr/src/myapp :将主机中当前目录下的myapp挂载到容器的/usr/src/myapp

-w /usr/src/myapp :指定容器的/usr/src/myapp目录为工作目录

python helloworld.py :使用容器的python命令来执行工作目录中的helloworld.py文件

 

Docker镜像导入导出

docker 提供把镜像导出export(保存save)为文件的机制,这样就可以把镜像copy到任意地方了。

方式一:容器export/import

格式:docker export CONTAINER(容器)

使用 docker ps -a 查看本机已有的容器.

方式一:镜像save/load

格式:docker save IMAGE(镜像)

使用  docker commit <CONTAIN-ID> <IMAGE-NAME>命令把一个正在运行的容器保存为镜像,如:

(1)首先查看所有的容器信息

(2)使用docker commit命令将指定容器保存为镜像

(3)使用docker images 查看刚才保存的镜像

(4)使用docker run 命令测试刚才保存的镜像是否正确

(5)使用docker save 命令将镜像导出成文件

现在就可以在任何装 docker 的地方加载 刚保存的镜像了。

查看加载的镜像

查看刚刚加载的镜像tag为<none>,现在可修改下镜像的tag名称:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值