docker使用命令

1,Docker环境信息
–info命令
用于检测Docker是否正确安装,一般结合docker version命令使用。

root@DS412:~# docker info
Containers: 8
 Running: 1
 Paused: 0
 Stopped: 7
Images: 24
Server Version: 18.09.8
Storage Driver: btrfs
Logging Driver: db
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
 Log: awslogs db fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: active
 NodeID: x17efuwwvlan4pmurpj6nm1w0
 Is Manager: true
 ClusterID: jyzzrzjlwe4azt7en4p3ip4v0
 Managers: 1
 Nodes: 1
 Default Address Pool: 10.0.0.0/8
 SubnetSize: 24
 Orchestration:
  Task History Retention Limit: 5
 Raft:
  Snapshot Interval: 10000
  Number of Old Snapshots to Retain: 0
  Heartbeat Tick: 1
  Election Tick: 10
 Dispatcher:
  Heartbeat Period: 5 seconds
 CA Configuration:
  Expiry Duration: 3 months
  Force Rotate: 0
 Autolock Managers: false
 Root Rotation In Progress: false
 Node Address: 192.168.50.200
 Manager Addresses:
  192.168.50.200:2377
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 0cf16177dbb234350dc27dd2bbd1d7cebd098108
runc version: 6cc9d3f2cd512eeb3d548e2f6b75bcdebc779d4d
init version: e01de58 (expected: fec3683)
Security Options:
 apparmor
Kernel Version: 3.10.105
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 3.855GiB
Name: DS412

Docker Root Dir: /volume1/@docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Labels:
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false

WARNING: No kernel memory limit support
WARNING: No cpu cfs quota support
WARNING: No cpu cfs period support

2,查看容器的信息container(ps)
docker ps命令可以查看容器的CONTAINER ID、NAME、IMAGE NAME、端口开启及绑定、容器启动后执行的COMMNAD。最常用的功能是通过ps来找到CONTAINER_ID,以便对特定容器进行操作。
docker ps 默认显示当前正在运行中的container
docker ps -a 查看包括已经停止的所有容器
docker ps -l 显示最新启动的一个容器(包括已停止的)


root@DS412:~# docker ps
CONTAINER ID        IMAGE                     COMMAND             CREATED             STATUS                    PORTS                    NAMES
42020a106905        wiserain/flexget:3.1.70   "/init"             2 weeks ago         Up 12 hours (unhealthy)   0.0.0.0:9095->5050/tcp   wiserain-flexget1

3, 列出机器上的镜像(images)

root@DS412:~# docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
openwrt1407                latest              1954b80d32e8        10 days ago         5.22MB
wiserain/flexget           3.1.70              a5b39a620b47        6 weeks ago         185MB
linuxserver/qbittorrent    latest              b1298bbf3417        3 months ago        309MB

4,从image启动一个container(run)
docker run命令首先会从特定的image创之上create一层可写的container,然后通过start命令来启动它。停止的container可以重新启动并保留原来的修改。run命令启动参数有很多,以下是一些常规使用说明

当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:

检查本地是否存在指定的镜像,不存在就从公有仓库下载
利用镜像创建并启动一个容器
分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
从地址池配置一个 ip 地址给容器
执行用户指定的应用程序
执行完毕后容器被终止
docker run :创建一个新的容器并运行一个命令

语法

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS说明:

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

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

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

-P: 随机端口映射,容器内部端口随机映射到主机的端口

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

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

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

--privileged=true: 特权模式

--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=[]: 开放一个端口或一组端口;

--volume , -v:	绑定一个卷

--device-read-bps="": 按每秒读取块设备的数据量设定上限

--device-write-bps="": 按每秒写入块设备的数据量设定上限

使用image创建container并执行相应命令,然后停止

# docker run ubuntu echo "hello world"
hello word

这是最简单的方式,跟在本地直接执行echo ‘hello world’ 几乎感觉不出任何区别,而实际上它会从本地ubuntu:latest镜像启动到一个容器,并执行打印命令后退出(docker ps -l可查看)。需要注意的是,默认有一个–rm=true参数,即完成操作后停止容器并从文件系统移除。因为Docker的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器。
容器启动后会自动随机生成一个CONTAINER ID,这个ID在后面commit命令后可以变为IMAGE ID

使用image创建container并进入交互模式, login shell是/bin/bash

# docker run -i -t --name mytest centos:centos6 /bin/bash
bash-4.1#

上面的–name参数可以指定启动后的容器名字,如果不指定则docker会帮我们取一个名字。镜像centos:centos6也可以用IMAGE ID (68edf809afe7) 代替),并且会启动一个伪终端,但通过ps或top命令我们却只能看到一两个进程,因为容器的核心是所执行的应用程序,所需要的资源都是应用程序运行所必需的,除此之外,并没有其它的资源,可见Docker对资源的利用率极高。此时使用exit或Ctrl+D退出后,这个容器也就消失了(消失后的容器并没有完全删除?)
(那么多个TAG不同而IMAGE ID相同的的镜像究竟会运行以哪一个TAG启动呢

运行出一个container放到后台运行

# docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 2; done"
ae60c4b642058fefcc61ada85a610914bed9f5df0e2aa147100eab85cea785dc

它将直接把启动的container挂起放在后台运行(这才叫saas),并且会输出一个CONTAINER ID,通过docker ps可以看到这个容器的信息,可在container外面查看它的输出docker logs ae60c4b64205,也可以通过docker attach ae60c4b64205连接到这个正在运行的终端,此时在Ctrl+C退出container就消失了,按ctrl-p ctrl-q可以退出到宿主机,而保持container仍然在运行
另外,如果-d启动但后面的命令执行完就结束了,如/bin/bash、echo test,则container做完该做的时候依然会终止。而且-d不能与–rm同时使用
可以通过这种方式来运行memcached、apache等。

映射host到container的端口和目录

映射主机到容器的端口是很有用的,比如在container中运行memcached,端口为11211,运行容器的host可以连接container的 internel_ip:11211 访问,如果有从其他主机访问memcached需求那就可以通过-p选项,形如-p <host_port:contain_port>,存在以下几种写法:

-p 11211:11211 这个即是默认情况下,绑定主机所有网卡(0.0.0.0)的11211端口到容器的11211端口上
-p 127.0.0.1:11211:11211 只绑定localhost这个接口的11211端口
-p 127.0.0.1::5000
-p 127.0.0.1:80:8080

目录映射其实是“绑定挂载”host的路径到container的目录,这对于内外传送文件比较方便,在搭建私服那一节,为了避免私服container停止以后保存的images不被删除,就要把提交的images保存到挂载的主机目录下。
使用比较简单,-v <host_path:container_path>,绑定多个目录时再加-v。

-v /tmp/docker:/tmp/docker

另外在两个container之间建立联系可用–link,详见高级部分或官方文档。
下面是一个例子:

# docker run --name nginx_test \
> -v /tmp/docker:/usr/share/nginx/html:ro \
> -p 80:80 -d \
> nginx:1.7.6
# docker run -it --rm --device-write-bps /dev/sda:1mb ubuntu-stress:latest /bin/bash
root@ffa51b81987c:/# dd if=/dev/zero of=test.out bs=1M count=100 oflag=direct
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 100.064 s, 1.0 MB/s    # 可以得知写入的平均速度是 1.0 MB/s

删除容器
docker rm <container_id/contaner_name>

删除所有停止的容器
docker rm $(docker ps -a -q)
删除镜像
docker rmi <image_id/image_name …>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值