zane@zane-V:~$ docker run -t -i ubuntu /bin/bash
root@cc3ab8154346:/#
docker run 运行一个容器
Ubuntu 是你想运行的image
-t 标志, 在新容器中分配一个终端
-i 标志,允许和容器的标准输入有一个交互性的连接
/bin/bash 在容器内部发起一个 Bash shell
容器中交互接口相当于又一个虚拟机拉。
root@cc3ab8154346:/# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
root@cc3ab8154346:/# pwd
/
root@cc3ab8154346:/# exit
exit
zane@zane-V:~$
exit 退出Bash shell,容器也随之结束。
开启守护进程 Hello world
创建一个守护进程的容器
zane@zane-V:~$ docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
2513c80cd509ac0b61b84c2db9504d3d6b9c378841d40275b207785b137a1e66
-d 标志,在后台中运行容器(用来守护它)
输出的一串字符串,是容器ID。且它是唯一的,用来识别容器的。让我们可以使用容器
这段字符串十分长,我们可以用短ID 替换它还可以命名它,更方便使用
docker ps 查看容器十分正在运行。
zane@zane-V:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2513c80cd509 ubuntu "/bin/sh -c 'while tr" 8 minutes ago Up 8 minutes infallible_banach
2513c80cd509 是比较短的容器ID
infallible_banach 容器的名字
docker 为启动的容器自动生成名字
当然我们也可以自己制定容器的名字
为了看到后台运行的容器,正在干啥我们使用 docker logs
zane@zane-V:~$ docker logs infallible_banach | head
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
zane@zane-V:~$ docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7a434a95f401 training/webapp "python app.py" 7 minutes ago Up 7 minutes 0.0.0.0:32768->5000/tcp elated_volhard
-l, 显示最近启动的容器。
PORTS
0.0.0.0:32768->5000/tcp
-P,传送到docker run,Docker将容器的所有端口映射到主机。
在这个例子中,Docker将5000端口(Flask 默认端口)映射到32768端口。
-p, 指定端口:
zane@zane-V:~$ docker run -d -p 80:5000 training/webapp python app.py
93964cbb6941206ee011b98c5cbf806d1a285a005b96db69024febd742afaa49
zane@zane-V:~$ docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
93964cbb6941 training/webapp "python app.py" 16 seconds ago Up 16 seconds 0.0.0.0:80->5000/tcp stupefied_wilson
这就将容器中的5000端口映射到本机的80端口;
验证:32768,80端口已经正常可以访问,而没有指定的8080则不能访问。
这样一个web 应用就已经运行在docker中。
设置网络端口的捷径
通过docker port 可以指定容器ID或者名字,来指定你需要对应的端口
zane@zane-V:~$ docker port elated_volhard 5000
0.0.0.0:32768
elated_volhard,容器名称
5000,容器内部的端口
0.0.0.0:32768,与容器内部端口对应的外部端口
列出容器所有的内部端口。
zane@zane-V:~$ docker port elated_volhard
5000/tcp -> 0.0.0.0:32768
zane@zane-V:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
93964cbb6941 training/webapp "python app.py" 27 minutes ago Up 27 minutes 0.0.0.0:80->5000/tcp stupefied_wilson
zane@zane-V:~$ docker stop stupefied_wilson
stupefied_wilson
zane@zane-V:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
重启web应用容器
zane@zane-V:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
zane@zane-V:~$ docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
93964cbb6941 training/webapp "python app.py" 29 minutes ago Exited (137) 2 minutes ago stupefied_wilson
zane@zane-V:~$ docker start stupefied_wilson
stupefied_wilson
zane@zane-V:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
93964cbb6941 training/webapp "python app.py" 29 minutes ago Up 4 seconds 0.0.0.0:80->5000/tcp stupefied_wilson
重启
zane@zane-V:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
93964cbb6941 training/webapp "python app.py" 31 minutes ago Up About a minute 0.0.0.0:80->5000/tcp stupefied_wilson
zane@zane-V:~$ docker restart stupefied_wilson
stupefied_wilson
zane@zane-V:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
93964cbb6941 training/webapp "python app.py" 31 minutes ago Up 4 seconds 0.0.0.0:80->5000/tcp stupefied_wilson
移除web应用容器
zane@zane-V:~$ docker rm stupefied_wilson
Error response from daemon: You cannot remove a running container 93964cbb6941206ee011b98c5cbf806d1a285a005b96db69024febd742afaa49. Stop the container before attempting removal or use -f