侧边栏壁纸
博主头像
晓然博主等级

走着、走着、花开了

  • 累计撰写 37 篇文章
  • 累计创建 15 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

[笔记]Docker核心技术之容器

晓然
2023-03-07 / 0 评论 / 0 点赞 / 21 阅读 / 1,704 字
温馨提示:
本文最后更新于 2023-03-07,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

容器基本命令

下载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

总结

待更新

0

评论区