Docker 命令(二)
Docker 入门启动docker
systemctl start docker
帮助命令
[*]docker --help
[*]docker --help 例:docker run --help
Docker镜像
[*]搜索镜像 docker search [镜像名字]
[*]获取镜像 docker pull [镜像名字]
[*]导入镜像 docker load --input [镜像包]
[*]导出镜像 docker save -o [镜像包] [镜像名字]
[*]查看镜像 docker images
[*]删除镜像 docker rmi [镜像ID]
1、执行docker search centos 会从dockerhub上搜索镜像
2、如果线上服务器无法连接dockerhub网络,可以通过其它方式下载docker镜像包,如centos.tar
执行命令docker load --input centos.tar 将镜像导入docker
除了input方式导入,还可以使用重定向导入docker load < centos.tar
3、获取镜像 docker pull centos
4、查看镜像 docker images
5、导出镜像 docker save -o centos.tar centos
6、删除镜像 docker rmi 67591570dd29 (上图IMAGE ID)
备注:如果镜像已经创建了一个容器,那么将无法进行删除
Docker容器
[*]启动容器 docker run [参数选项] [镜像名称] [命令(可省略)]
[*]运行已停止容器 docker start
[*]停止容器 docker stop
[*]强制关闭容器 dokcer kill
[*]查看容器 docker ps
[*]进入容器 docker attach | docker exec | nsenter
[*]删除容器 docker rm
[*]获取容器元数据 docker inspect
[*]容器访问日志 docker logs
1、启动容器 docker run --name mydocker -t -i centos /bin/bash
[*]--name 名称,管理容器时可以通过ID或名称
[*]-t 让docker分配一个伪终端
[*]-i 让docker的标准输入打开{input}
提示:最后的/bin/bash可以省略,但是最后一个如果不是命令,那就是镜像的名称。
输入上方的命令之后会直接进入到容器里面
exit退出
备注:容器不是一个虚拟机,因为他就是一个进程,如果我们退出,这个进程就退出了。
通过PID我们可以看出,容器中的PID=1的是/bin/bash,正常centos 7系统中PID为1的进程是/usr/lib/systemd/systemd
简单理解,容器给进程做隔离使用,虚拟机给操作系统做隔离使用。
2、docker start mydocker 或 docker start f13d63fd6457 方式让容器运行
3、查看容器 docker ps -a(运行和不运行的容器全部列出)
docker ps -a -q列出所有容器的docker id
# docker ps -a -q
86c9a83d95be
8822c2f37e9e
8814cf80b424
96892a7bb67e
e9e4eed824dd
f807dc543291
f13d63fd6457
4、进入容器 docker attach mydocker
备注:这样进入容器的缺点就是如果在开一个窗口就会同步操作,类似于单用户模式(windows远程桌面)。
生产场景是不使用docker attach的,需要我们使用nsenter这个工具,这个工具包含在util-linux软件包里面。
yum install util-linux -y
我们通过nsenter就可以进入容器,但是nsenter是通过pid进入容器里,所以我们需要知道容器的pid。我们可以通过docker inspect来获取到pid。
# docker start mydocker
mydocker
# docker inspect -f "{{ .State.Pid }}" mydocker
61864
# nsenter -t 61864 -m -u -i -n -p
nsenter --help 帮助命令
[*]-m, –-mount参数是进去到mount namespace中
[*]-u, –-uts参数是进入到uts namespace中
[*]-i, –-ipc参数是进入到System V IPC namaspace中
[*]-n, –-net参数是进入到network namespace中
[*]-p, –-pid参数是进入到pid namespace中
[*]-U, –-user参数是进入到user namespace中
[*]-t,--target参数是获取名字空间的目标进程
/bin/bash是我们运行容器产生的进程
-bash 是我们使用nsenter产生的,这样如果我们退出容器,容器就不会退出,因为/bin/bash还在运行
# exit
logout
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f13d63fd6457 centos "/bin/bash" 52 minutes ago Up 17 minutes mydocker
脚本实现进入docker
# cat docker_in.sh
#!/bin/bash
# Use nsenter to access docker
docker_in(){
NAME_ID=$1
PID=$(docker inspect -f "{{ .State.Pid }}" $NAME_ID)
nsenter -t $PID -m -u -i -n -p
}
docker_in $1
执行结果如下:
# chmod +x docker_in.sh
# ./docker_in.sh mydocker
# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 10.00.0117681680 ? Ss+08:12 0:00 /bin/bash
root 450.00.0151681884 ? S 08:37 0:00 -bash
root 670.00.0508441708 ? R+ 08:37 0:00 ps -aux
5、docker exec不进入容器,但将命令发送容器里执行并获取返回结果
# docker exec mydocker ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 10.00.0117681680 ? Ss+08:12 0:00 /bin/bash
root 870.00.0474401672 ? Rs 08:42 0:00 ps -aux
docker exec进入容器
# docker exec -it mydocker /bin/bash
# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 10.00.0117681680 ? Ss+08:12 0:00 /bin/bash
root 910.00.0117681888 ? Ss 08:45 0:00 /bin/bash
root 1030.00.0474401672 ? R+ 08:46 0:00 ps aux
它执行命令/bin/bash的PID是91
6、删除容器 docker rm mydocker 或 docker rm -f mydocker
docker另一种删除方式 ,启动一个容器完成命令后就删
# docker run --rm centos /bin/echo "shhnwangjian"
shhnwangjian
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f13d63fd6457 centos "/bin/bash" About an hour ago Up 41 minutes mydocker
可以在测试或学习时使用,退出时删除容器
# docker run --rm --name test -it centos /bin/bash
# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 10.60.0117681880 ? Ss 08:55 0:00 /bin/bash
root 130.00.0474401668 ? R+ 08:55 0:00 ps aux
# exit
exit
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f13d63fd6457 centos "/bin/bash" About an hour ago Up 43 minutes mydocker
删除所有容器docker rm $(docker ps -a -q)
7、强制关闭所有运行容器
docker kill $(docker ps -q)
8、ngnix容器
# docker pull nginx
# docker run -d nginx
4acac5d79bb60c3ad3d8a7da59855c75279a866382939e10947e2802ab8a9072
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4acac5d79bb6 nginx "nginx -g 'daemon off" 23 seconds ago Up 21 seconds 80/tcp, 443/tcp goofy_jepsen
f13d63fd6457 centos "/bin/bash" 2 hours ago Up About an hour mydocker
docker run -d 后台运行
页:
[1]