Docker的基础知识(二)
搜索镜像
docker search <镜像名>
[root@web01 ~]# docker search centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 6119 [OK]
ansible/centos7-ansible Ansible on Centos7 132 [OK]
consol/centos-xfce-vnc Centos container with "headless" VNC session… 118 [OK]
jdeathe/centos-ssh OpenSSH / Supervisor / EPEL/IUS/SCL Repos - … 115 [OK]
centos/systemd systemd enabled base container. 86 [OK]
centos/mysql-57-centos7 MySQL 5.7 SQL database server 79
imagine10255/centos6-lnmp-php56 centos6-lnmp-php56 58 [OK]
下载镜像
docker pull <镜像名>:<标签>
[root@web01 ~]# docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete
Digest: sha256:49a1c8800c94df04e9658809b006fd8a686cab8028d33cfba2cc049724254202
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest
列出本地镜像列表
docker images
[root@web01 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jumpserver/jms_koko 2.0.1 589d376dd1f0 5 weeks ago 356MB
jumpserver/jms_guacamole 2.0.1 875616016472 5 weeks ago 659MB
mysql/mysql-server 5.7 278f8eedd831 3 months ago 338MB
创建容器
docker run [options] <images> [command]
options:
-i:表示启动一个可交互的容器,并持续打开标准输入
-t:表示使用终端关联到容器的标准输入输出上(伪终端)
-d:表示将容器放置后台运行
--rm:退出后删除容器
--name:表示定义容器唯一名称,若不指定,docker会自动生成
“run -d”一个容器后有一个问题,docker ps -a发现容器已经退出
原因:docker容器后台运行,就必须要一个前台进程;容器运行的命令如果不是那些一直挂起的命令(如top,tail),就会自动退出
[root@web01 /server]# docker run -d ubuntu /bin/sh -c "tail -f /etc/passwd "
7c53320ff9e2fe5ae052c82e7fd2cb84a8165705a0f6bc32a560267bb74d1fa4
[root@web01 /server]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7c53320ff9e2 ubuntu "/bin/sh -c 'tail -f…" 4 seconds ago Up 4 seconds serene_albattani
查看容器列表
docker ps
#-a 选项列出所有容器,包括终止的容器
[root@web01 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
50d961ce27da jumpserver/jms_koko:2.0.1 "/bin/bash" About a minute ago Exited (127) 8 seconds ago jumpserver
‘启动/重启/停止/删除’ 容器
docker start/restart/stop/rm <容器名>/<或容器ID>
[root@web01 ~]# docker start 50d961ce27da
50d961ce27da
[root@web01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
50d961ce27da jumpserver/jms_koko:2.0.1 "/bin/bash" 4 minutes ago Up 3 seconds
exit容器停止退出,ctrl+P+Q 容器不停止退出
查看容器日志
docker logs -f -t --tail <容器ID>
-t:加入时间戳
-f:跟随最新的日志打印
--tail <数字>:显示最后多少条
[root@web01 ~]# docker run -d --name hello ubuntu /bin/sh -c "while true;do echo hello;sleep 2;done" #后台运行ubuntu容器,执行脚本:2秒输出一次'hello'.
[root@web01 ~]# docker logs -tf --tail 3 hello
2020-08-04T03:58:04.031315538Z hello
2020-08-04T03:58:06.032629017Z hello
2020-08-04T03:58:08.033905089Z hello
查看容器内部细节
docker inspect <容器名>
连接容器
docker attach <容器名>
若运行DB或服务器应用程序将无法进行输入,只能看到输出
缺点:如果两个窗口都attach到同一容器中,两个窗口操作会同步,要退出都退出
从外部运行容器内的命令
docker exec <容器名> <命令> <参数>
#谨慎使用exec,会对容器造成意外影响
#exec 只能在容器运行时使用
[root@web01 ~]# docker exec hello echo "hello world"
Error response from daemon: Container ccf9d9b6fc3133bd2c9bb82917a50c813b1f9342ad23dacd470f3605991ad7a5 is not running
[root@web01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
521f6ecdefe9 ubuntu "/bin/bash" 3 seconds ago Up 2 seconds hello
[root@web01 ~]# docker exec hello echo "hello world"
hello world
从容器内拷贝文件到主机上
docker cp <容器名>:/路径/文件 /本地路径
[root@web01 /server]# docker cp ubuntu:/tmp/test.txt ./
[root@web01 /server]# ls
test.txt
删除镜像
docker rmi <容器名>:<标签>