Docker 容器操作
Docker 镜像的管理方法在后面章节,这里先直接用下面的命令获取后面的演示中用到的镜像:
docker pull alpine:3.9.5
docker command 中列出了所有命令的用法,下面只列举最常用的一些。
前台运行
$ docker run --rm -it alpine:3.9.5 /bin/sh
/ # ip addr |grep eth0
298: eth0@if299: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
docker help run 查看选项:
--rm :执行结束后删除容器
-t :创建tty
-i :交互运行
后台运行
$ docker run -d alpine:3.9.5 /bin/sh -c "while true;do echo hello world; sleep 1;done"
2eecc150eda7af8226b29856468a5428e59664977663779f591cae59c1a217b5
-d 表示放入后台运行, 下面显示字符串容器的 id。
查看容器
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d9c9aed4e644 alpine:3.9.5 "/bin/sh -c 'while t…" 57 seconds ago Up 55 seconds infallible_antonelli
第一栏是容器 ID 的简短形式, 最后一栏 docker 自动为容器分配的名字,可以通过这个名字和容器进行交互。
运行时指定容器名:
$ docker run -d --name="Hello" alpine:3.9.5 /bin/sh -c "while true;do echo hello world; sleep 1;done"
容器的输出
用 docker logs 查看后台运行的容器的输出, 目标容器可以通过 id 指定, 也可以通过 name 指定:
$ docker logs -f Hello
hello world
hello world
hello world
容器中进程
可以通过 docker top 查看容器内运行的进程:
$ docker top Hello
PID USER TIME COMMAND
51993 root 0:00 /bin/sh -c while true;do echo hello world; sleep 1;done
52096 root 0:00 sleep 1
容器详情
可以通过 docker inspect 查看容器的详情:
$ docker inspect Hello
[
{
"Id": "ef3983bcc0c13660d95d33dce1a4cd7626992a2f211022ac509bae891918918d",
"Created": "2020-03-01T10:44:06.5211288Z",
"Path": "/bin/sh",
"Args": [
"-c",
"while true;do echo hello world; sleep 1;done"
...省略...
进入运行中的容器
docker exec 在指定容器中执行命令,可以通过它进入容器内部:
$ docker exec -it Hello /bin/sh
/ # ip addr |grep eth0
328: eth0@if329: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP
inet 172.17.0.3/16 brd 172.17.255.255 scope global eth0
停止容器
docker stop停止正在运行的容器:
$ docker stop Hello
Hello
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cf591db9d6e9 alpine:3.9.5 "/bin/sh -c 'while t…" About a minute ago Exited (137) 55 seconds ago Hello
容器被停止之后,容器文件依然是存在的。
删除容器
删除运行中的容器:
$ docker rm -f Hello
删除已经退出的容器:
$ docker rm -Hello
端口映射
在run的-P/-p的选项, 这个选项将镜像的端口映射到宿主机的端口, 这样就可以从外部使用镜像内的服务。
$ docker run -idt -p 8080:80 nginx:stable
Unable to find image 'nginx:stable' locally
...省略...
查看端口映射情况:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
223c0e90f378 nginx:stable "nginx -g 'daemon of…" 10 seconds ago Up 9 seconds 0.0.0.0:8080->80/tcp friendly_leavitt
访问端口:
$ curl 127.0.0.1:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
本地目录挂载
把本地的目录挂载到容器中:
$ mkdir config
$ echo aaaa >config/a.conf
$ docker run -it --rm -v `pwd`/config:/tmp/ alpine:3.9.5 /bin/sh