获取镜像:
docker pull ubuntu
用 ubuntu 镜像启动一个容器,参数为以命令行模式进入该容器:
$ docker run -it ubuntu /bin/bash
各个参数解析:
- -t: 在新容器内指定一个伪终端或终端。
- -i: 允许你对容器内的标准输入 (STDIN) 进行交互
- ubuntu: ubuntu 镜像。
- /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
runoob@runoob:~$ docker run ubuntu:15.10 /bin/echo "Hello world"
Hello world
- run: 运行一个容器。
- ubuntu:15.10 指定要运行的镜像,先从本地主机上查找镜像是否存在,如果不存在,就会从镜像仓库 Docker Hub 下载公共镜像。
- /bin/echo "Hello world": 在启动的容器里执行的命令
要退出终端,直接输入 exit:
root@ed09e4490c57:/# exit
启动容器(后台模式)
使用以下命令创建一个以进程方式运行的容器
runoob@runoob:~$ docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
后台运行
在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式。
$ docker run -itd --name ubuntu-test ubuntu /bin/bash
注:加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec(下面会介绍到)。
docker attach #连接到正在运行中的容器
如果container当前在运行bash,CTRL-C自然是当前行的输入,没有退出;
如果container当前正在前台运行进程,如输出nginx的access.log日志,CTRL-C不仅会导致退出容器,而且还stop了。
attach带上--sig-proxy=false来确保CTRL-D或CTRL-C不会关闭容器。
docker attach 37d61466c69e \\注意:如果在stdin中exit,会导致容器的停止。
docker exec -it 37d61466c69e ps -ef \\远程执行容器中的命令
docker exec -it 37d61466c69e /bin/bash \\登录容器,执行exit不会导致容器停止。
查看容器详细信息:docker inspect 013f517d2c85
显示容器的详细地址:
sudo docker inspect 013f517d2c85 |grep IPAddres|cut -d '"' -f 4
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d53a0e426a7f ubuntu:latest "/bin/sh -c 'while..." 8 minutes ago Up 8 minutes pensive_newton
输出详情介绍:
CONTAINER ID: 容器 ID。
IMAGE: 使用的镜像。
COMMAND: 启动容器时运行的命令。
CREATED: 容器的创建时间。
STATUS: 容器状态。
状态有7种:
- created(已创建)
- restarting(重启中)
- running(运行中)
- removing(迁移中)
- paused(暂停)
- exited(停止)
- dead(死亡)
PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。
NAMES: 自动分配的容器名称。
如果是应用容器,sshd服务不是必须的,如果是系统容器,sshd服务需要开启。在容器中启用sshd服务操作,进入容器后:
[root@86999be36110 /]#yum install net-tools
[root@86999be36110 /]# yum install openssh-server
[root@86999be36110 /]# mkdir -p /var/run/sshd
[root@86999be36110 /]# /usr/sbin/sshd -D
[root@86999be36110 /]# /usr/sbin/sshd -D &
取消pam登录限制,PAM(Pluggable Authentication Modules )是由Sun提出的一种认证机制。它通过提供一些动态链接库和一套统一的API,将系统提供的服务 和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序,同时也便于向系 统中添加新的认证手段。
[root@86999be36110 /]# sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd
[root@86999be36110 ~]# cd /root
[root@86999be36110 ~]# ssh-keygen -t rsa
[root@86999be36110 ~]# vi /root/run-sshd.sh
#!/bin/bash
/usr/sbin/sshd -D
[root@86999be36110 ~]# exit
或
$ docker stop 86999be36110
docker ps 显示指定的列
可以自己指定显示的模板,例如:
docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Ports}}"
- table - 表示显示表头列名
- {{.ID}} - 容器ID
- {{.Command}} - 启动执行的命令
显示结果:
$ docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Ports}}"
CONTAINER ID NAMES PORTS
db3df460fe14 dev-peer0.org1.example.com-fabcar-1.0
b6f803814cce cli
10724ca7364f peer0.org1.example.com 0.0.0.0:7051->7051/tcp, 0.0.0.0:7053->7053/tcp
20d930e6e9f7 ca.example.com 0.0.0.0:7054->7054/tcp
可用的占位符
名称 | 含义 |
.ID | 容器ID |
.Image | 镜像ID |
.Command | 执行的命令 |
.CreatedAt | 容器创建时间 |
.RunningFor | 运行时长 |
.Ports | 暴露的端口 |
.Status | 容器状态 |
.Names | 容器名称 |
.Label | 分配给容器的所有标签 |
.Mounts | 容器挂载的卷 |
.Networks | 容器所用的网络名称 |
docker ps --filter id=a1b2c3 --filter name=bingohuang
CONTAINER ID: 容器 ID。
IMAGE: 使用的镜像。
COMMAND: 启动容器时运行的命令。
CREATED: 容器的创建时间。
STATUS: 容器状态。
状态有7种:
- created(已创建)
- restarting(重启中)
- running(运行中)
- removing(迁移中)
- paused(暂停)
- exited(停止)
- dead(死亡)
PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。
NAMES: 自动分配的容器名称。
根据条件过滤显示的内容
根据标签过滤
$ docker run -d --name=test-nginx --label color=blue nginx
$ docker ps --filter "label=color"
$ docker ps --filter "label=color=blue"
根据名称过滤
$ docker ps --filter"name=test-nginx"
根据状态过滤
$ docker ps -a --filter 'exited=0'
$ docker ps --filter status=running
$ docker ps --filter status=paused
根据镜像过滤
#镜像名称
$ docker ps --filter ancestor=nginx
#镜像ID
$ docker ps --filter ancestor=d0e008c6cf02
根据启动顺序过滤
$ docker ps -f before=9c3527ed70ce
$ docker ps -f since=6e63f6ff38b0