docker基础命令行

本篇适合于对docker有一定了解的同学,如果不知道docker是什么,有哪些特点请自行百度。
一、image镜像相关
“镜像”这个词语应该很多人都知道,假设我们安装windows系统,一个windows iso文件,这个iso文件就是镜像文件。但是对于docker的镜像来说并非是iso文件,它也没有文件实体。
获取image方式有如下四种方式:
     1、docker pull 镜像名字。例如docker pull centos。默认是从官方dockerhub registry下载,但是很遗憾的告诉,基本上下载不了,因为被墙了。
     2、从现有容器中,导出一个镜像。

[root@mycontainer ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
9b1d9d59b365        67591570dd29        "/bin/bash"         15 minutes ago      Up 15 minutes                           tender_liskov
[root@mycontainer ~]# 
[root@mycontainer ~]# 

对于导入和导出有两对命令行,如下所示:
1)save/load  这种方式会把images结构和rootfs文件系统一起打包,相当于是完整的images。

[root@localhost containerc]# docker save busybox > busybox.tar
[root@localhost containerc]# docker load < busybox.tar

2)export/import  这种方式只会吧rootfs文件系统打包,并不包含images结构。

  话说回来,如果都有docker容器,为啥还要自己去制作镜像呢?所以就下面这两种方式了。

3、从现有linux系统导出rootfs系统。

制作tar包用于打包rootfs(最好找一个比较干净的linux或者重新安装CentOS-7.0-x86_64-minimal.iso,不然打包出的文件很大)

[root@localhost home]# 
[root@localhost home]# tar --numeric-owner --exclude=/proc --exclude=/sys -cvf centos7.0-base.tar /
[root@localhost home]# 

通过import命令生成images

cat centos7.0-base.tar | docker import - centos7-base  

4、自己制作一个镜像(Centos:febootstrap 、Ubuntu:debootstrap)

请参考https://my.oschina.net/mfk123/blog/292413?fromerr=JJnVGe0l#

以上内容就是获取或者制作镜像。建议:取一个干净、最简单的镜像作为基础镜像。接下来介绍一下镜像相关的命令行。

[root@mycontainer ~]# docker images --help

Usage:  docker images [OPTIONS] [REPOSITORY[:TAG]]

List images

Options:
  -a, --all             Show all images (default hides intermediate images)
      --digests         Show digests
  -f, --filter value    Filter output based on conditions provided (default [])
      --format string   Pretty-print images using a Go template
      --help            Print usage
      --no-trunc        Don't truncate output
  -q, --quiet           Only show numeric IDs

Images相关的内容,比较简单。基本上罗列当前系统内的images列表。下面这个命令行,比较底层了,用于查询image和container的信息,此命令行会输出json格式数据,具体内容在另外一篇介绍。

[root@mycontainer ~]# 
[root@mycontainer ~]# docker inspect -h

Usage:  docker inspect [OPTIONS] CONTAINER|IMAGE|TASK [CONTAINER|IMAGE|TASK...]

Return low-level information on a container, image or task

  -f, --format       Format the output using the given go template
  --help             Print usage
  -s, --size         Display total file sizes if the type is container
  --type             Return JSON for specified type, (e.g image, container or task)
[root@mycontainer ~]# 
[root@mycontainer ~]# 

我们辛苦创建的镜像应该如何分享给大家呢?这需要用到私有仓库了,私有仓库搭建请参考此篇。

二、container容器相关

  可能有很多像我一样的初学者,一直搞不清楚docker中image和container是什么关系?我可以用一个最简单的例子说明:image是就是类文件(.cpp or .java),容器是就是这些类文件new出来的对象,也就是说image是静态事物,container是动态事物。image只能有且只有一个,但container可以有多个。

  通过docker run 命令可以创建一个容器,run子命令是非常庞大的命令,里面有很多参数,这里不一一具体介绍,只介绍常用参数,若想知道相关命令,可通过docker run --help查看。

参数

说明

举例

备注

--name

指定容器名称

docker run --name hello

如果没有指定则随机生成

-e, --env value

设置环境变量

docker run -e “a=b” XX XX

设置多个环境变量,需写多个-e

-d, --detach

后端运行

docker run -d

-h,--hostname string

执行容器名称

docker run -h hello

-p, --publish value

端口映射

docker run -p 1000:2000

1000为host主机端口

2000为容器端口

-P, --publish-all

端口映射所有

docker run -P

不经常用,出于安全考虑最好不要这样操作。

-i, --interactive

交互式

docker run -i

-t, --tty

启动终端

docker run -t

-v, --volume value

挂载目录

docker run -v /hostdir:dir

Hostdir为主机中目录

Dir为容器内目录

下面是具体演示内容:

1、后端启动模式

[root@localhost ~]#  docker run -d -p 10000:22 -h mydocker-1 -e hello=hello-world --name myssh3 myos/centos-ssh
e737abe438fce9215bed439415da657002549dd4447a276d28bb7fb3dbdfab2b
[root@localhost ~]# 
[root@localhost ~]# 

我这个容器是具有ssh服务的,在启动容器的时候如果没有指定Command,默认启动ssh后台服务。我们通过ssh命令进入docker容器内。

[root@localhost ~]# ssh -p 10000 root@127.0.0.1
The authenticity of host '[127.0.0.1]:10000 ([127.0.0.1]:10000)' can't be established.
ECDSA key fingerprint is e8:3e:19:87:3a:ce:8e:7f:48:49:36:57:6b:a2:49:5c.
Are you sure you want to continue connecting (yes/no)? yes
[root@mydocker-1 ~]# 
[root@mydocker-1 ~]# 
[root@mydocker-1 ~]# 

查看docker容器信息

[root@localhost ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND               CREATED             STATUS              PORTS                   NAMES
4813cfbf0566        myos/centos-ssh     "/usr/sbin/sshd -D"   4 minutes ago       Up 3 minutes        0.0.0.0:10000->22/tcp   myssh3
bd9a3709107e        myos/centos-ssh     "/bin/bash"           7 minutes ago       Up 6 minutes        22/tcp                  myssh
[root@localhost ~]# 
[root@localhost ~]# 

2、端口映射

端口映设在上面已经配置了,并且用过ssh方法验证通过 

3、交互式

[root@localhost ~]# 
[root@localhost ~]# docker run -it docker.io/centos /bin/bash
[root@4be2076e67de /]# 
[root@4be2076e67de /]# 

启动容器还有一个命令exec,那么exec和run有什么区别呢?

exec:在已经存在容器中执行命令。

run: 基于image创建一个容器,同时执行命令。

最后吐槽一下:csdn博客编辑器太烂了!!!还不如原先的呢,难道没有经过测试吗??

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值