容器基本命令
下载ubuntu镜像
有了镜像才可以创建容器,下载ubuntu镜像来测试学习
docker pull ubuntu
新建容器并启动
命令格式
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
常用参数说明
--name="Name" 容器名字 tomcat01 tomcat02 用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器看唉内容
-p 指定容器端口 -p 8080:8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口
-p 容器端口
-P 随机指定端口
测试
启动并进入容器
xiaoran@cjdll:~$ docker run -it ubuntu /bin/bash
# 进入容器后发现主机名字变为了容器id(972501af4077)
root@972501af4077:/# ls # 查看容器内的ubuntu,基础版本,很多命令都不完善
bin dev home lib32 libx32 mnt proc run srv tmp var
boot etc lib lib64 media opt root sbin sys usr
从容器中退回主机
root@972501af4077:/# exit
exit
xiaoran@cjdll:~$ ls
运行中的容器查看
命令格式
docker ps [OPTIONS]
常用参数
docker ps # 列出当前正在运行的容器
docker ps -a # 列出当前正在运行的容器 + 历史运行过的容器
docker ps -n=? # 显示最近创建的容器
docker ps -q # 只显容器的id
演示
xiaoran@cjdll:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
xiaoran@cjdll:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
972501af4077 ubuntu "/bin/bash" 9 minutes ago Exited (0) 7 minutes ago sweet_khorana
9282656b0e71 ubuntu "/bin/bash" 9 minutes ago Exited (0) 9 minutes ago interesting_bardeen
xiaoran@cjdll:~$ docker ps -n=1
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
972501af4077 ubuntu "/bin/bash" 9 minutes ago Exited (0) 7 minutes ago sweet_khorana
# 显示所有容器id
xiaoran@cjdll:~$ docker ps -aq
972501af4077
9282656b0e71
退出容器
exit #直接容器停止退出
Ctrl + P + Q #容器不停止退出
删除容器
命令格式
docker rm [OPTIONS] CONTAINER [CONTAINER...]
常用命令
docker rm 容器id #删除指定的容器,不能删除正在运行的容器,如果要强制删除 rm -f
docker rm -f $(docker ps -aq) #删除所有容器
docker ps -a -q |xargs docker rm # 删除所有容器
演示
指定容器id删除
# 查看所有容器
xiaoran@cjdll:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ce2bb15b8ee6 ubuntu "/bin/bash" 3 seconds ago Up 2 seconds mystifying_zhukovsky
972501af4077 ubuntu "/bin/bash" 2 hours ago Exited (0) 2 hours ago sweet_khorana
9282656b0e71 ubuntu "/bin/bash" 2 hours ago Exited (0) 2 hours ago interesting_bardeen
# 删除容器id为 972501af4077 的容器
xiaoran@cjdll:~$ docker rm 972501af4077
972501af4077
# 发现容器id 972501af4077 已不存在
xiaoran@cjdll:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ce2bb15b8ee6 ubuntu "/bin/bash" About a minute ago Up About a minute mystifying_zhukovsky
9282656b0e71 ubuntu "/bin/bash" 2 hours ago Exited (0) 2 hours ago interesting_bardeen
强制删除所有容器
xiaoran@cjdll:~$ docker rm -f $(docker ps -aq)
ce2bb15b8ee6
9282656b0e71
# 发现容器列表为空,而且正在运行的容器也被删除了
xiaoran@cjdll:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
启动和停止容器的操作
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止容器
docker kill 容器id #强制停止当前容器
日志、元数据、进程的查看
后台启动容器
命令格式
docker run -d 镜像名
演示
后台运行ubuntu,但查看正在运行的容器时,发现没有正在运行的容器
xiaoran@cjdll:~$ docker run -d ubuntu
08f416864900e0913acf3cb6168d6f2d4ad61e167414cc2ee5ccbe0b71635028
xiaoran@cjdll:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
原因:docker容器使用后台运行,就必须要有一个前台进行,docker发现没有应用,就会自动停止;比如nginx容器启动后,发现自己没有蹄冻服务,就会立刻停止,就时没有程序了
查看日志
命令格式
docker logs [OPTIONS] CONTAINER
常用参数
-tf #显示日志
--tail number #要显示日志条数
演示
先编写一个shell脚本(显示当前时间),使其产生日志
xiaoran@cjdll:~$ docker run -d ubuntu /bin/sh -c "echo $(date)"
83351ef527b285c4fb01dc3c8ee7c85dfd3d8a4952d6b8678dc200ea24b5c897
日志查看
# 不加参数
xiaoran@cjdll:~$ docker logs 83351
2023年 03月 05日 星期日 14:45:43 CST
# tf参数
xiaoran@cjdll:~$ docker logs -tf 8335
2023-03-05T06:45:44.146239989Z 2023年 03月 05日 星期日 14:45:43 CST
# -t参数
xiaoran@cjdll:~$ docker logs -t 8335
2023-03-05T06:45:44.146239989Z 2023年 03月 05日 星期日 14:45:43 CST
# -f 参数
xiaoran@cjdll:~$ docker logs -f 8335
2023年 03月 05日 星期日 14:45:43 CST
查看容器进程信息
命令格式
docker top CONTAINER [ps OPTIONS]
演示
查看正在运行容器(id:c58e7848ded4)信息
xiaoran@cjdll:~$ docker top c58e7848ded4
UID PID PPID C STIME TTY TIME CMD
root 5582 5560 0 14:59 pts/0 00:00:00 /bin/bash
查看镜像的元数据
命令格式
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
演示
查看容器(id:c58e7848ded4)的详细信息
$ docker inspect c58e7848ded4
进入容器命令和拷贝命令
通常容器都是使用后台方式运行的,需要进入容器,修改一些配置
进入容器之 docker exec
命令格式
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
常用参数
-it #以交互的方式进入容器
测试
# 查看正在运行的容器
xiaoran@cjdll:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c58e7848ded4 ubuntu "/bin/bash" 13 minutes ago Up 13 minutes magical_dijkstra
# 进入容器
xiaoran@cjdll:~$ docker exec -it c58e7848ded4 /bin/bash
# 主机名变为容器id,表示已经金属容器
# exit 退出容器
root@c58e7848ded4:/# exit
exit
# 退出容器后,容器状态仍在运行
xiaoran@cjdll:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c58e7848ded4 ubuntu "/bin/bash" 13 minutes ago Up 13 minutes magical_dijkstra
进入容器之docker attach
命令格式
docker attach [OPTIONS] CONTAINER
测试
#查看正在运行的容器
xiaoran@cjdll:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c58e7848ded4 ubuntu "/bin/bash" 16 minutes ago Up 16 minutes magical_dijkstra
# attach方式进入容器
xiaoran@cjdll:~$ docker attach c58e7848ded4
root@c58e7848ded4:/# ls
bin boot dev etc home lib lib32 lib64 libx32 media mnt opt proc root run sbin srv sys tmp usr var
# 退出容器
root@c58e7848ded4:/# exit
exit
# 退出容器后,发现没有正在运行的容器
xiaoran@cjdll:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
exec与attach区别
docker exec #进入容器中会产生一个子进程,exit时只是结束了子进程,并不影响主进程 (常用)
docker attach # 进入容器后,不会产生新的进程
从容器拷贝命令
命令格式
# 从容器内拷贝文件到宿主机上
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [可选参数] 容器:容器内路径 目的主机路径
# 从宿主机上拷贝文件到容器内
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
从容器内拷贝文件到宿主机上
查看容器内home目录下存在的文件
root@c58e7848ded4:/home# ls
root@c58e7848ded4:/home# touch test.txt
将容器内home/test.txt
拷贝到主机当前用户家目录下
xiaoran@cjdll:~$ docker cp c58e7848ded4:/home/test.txt ~
Successfully copied 1.536kB to /home/xiaoran
xiaoran@cjdll:~$ ls
test.txt
总结
待更新
评论区