Docker基本命令

Docker基本命令

Docker常用命令

启动 Docker

systemctl start docker

在服务器关机或者重启后,是需要重新启动 Docker 的。 命令如下:

systemctl start docker

查看日志

docker logs

语法

 docker logs [参数] 容器

参数

  • f:日志流动输出。
  • t:展示时间戳。
  • -tail:从日志末尾显示的行数。

为模拟日志输出效果,我们先编写一段脚本

while true;do echo sail;sleep 3;done

以上脚本实现的效果为:每隔 3 秒输出字符串 sail。

以脚本启动容器

[root@sail ~]# docker logs -f -t --tail 10 c3d59f55d600
2021-12-10T03:01:28.607288480Z sail
2021-12-10T03:01:31.609334595Z sail
2021-12-10T03:01:34.611361943Z sail
2021-12-10T03:01:37.613461457Z sail
2021-12-10T03:02:10.636760025Z sail

可以看到,按此命令会看到容器最后 10 条日志,且每隔 3 秒滚动输出一条日志。

后台启动

docker run -d

语法

docker run -d 镜像

后台启动镜像

[root@sail ~]# docker run -d centos
0aee6f74b913f120195ca323892867bba7d72f2671f2f8b17278a3e029ad5bfd
[root@sail ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED        STATUS        PORTS     NAMES

使用 docker run -d 启动,也并不能保证容器一定能在后台运行,如果没有前台使用,容器启动后发现自己没有提供服务,会立刻停止。

前面的 docker run -d centos /bin/sh -c "while true;do echo sail;sleep 3;done" 命令,由于启动后运行了脚本打印日志,即提供了服务,所以不会停止。

查看容器信息

docker inspect

语法

docker inspect 容器

示例

[root@sail ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS         PORTS     NAMES
c3d59f55d600   centos    "/bin/sh -c 'while t…"   24 minutes ago   Up 5 seconds             musing_poincare

[root@sail ~]# docker inspect c3d59f55d600
[.....]

不管容器是否运行,都可以使用该命令查看。

进入正在运行的容器

容器是一个微型的 Linux 系统,我们通常需要进入容器进行操作。

docker exec

使用 docker exec 可以进入容器并开启一个新的终端,可以在里面操作。

语法

docker exec [参数] 容器 路径

参数

  • d:后台运行。
  • it:交互模式进入。
[root@sail ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED        STATUS        PORTS     NAMES
96ed3fe3e7f1   centos    "/bin/bash"   15 hours ago   Up 15 hours             centos01

[root@sail ~]# docker exec -it 96ed3fe3e7f1 /bin/bash
[root@96ed3fe3e7f1 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

[root@96ed3fe3e7f1 /]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Dec09 pts/0    00:00:00 /bin/bash
root        15     0  0 03:38 pts/1    00:00:00 /bin/bash
root        30    15  0 03:39 pts/1    00:00:00 ps -ef

这种进入方式是单独开了一个新进程的方式。

docker attach

使用 docker attach 会进入容器正在执行的终端,不会启动新的进程。

语法 docker attach 容器

[root@sail ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED        STATUS        PORTS     NAMES
96ed3fe3e7f1   centos    "/bin/bash"   17 hours ago   Up 17 hours             centos01

[root@sail ~]# docker attach 96ed3fe3e7f1
[root@96ed3fe3e7f1 /]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Dec09 pts/0    00:00:00 /bin/bash
root        33     1  0 05:49 pts/0    00:00:00 ps -ef

这种进入方式没有开启新的进程(/bin/bash 是 centos 容器的默认终端)。

从容器内拷贝文件到主机

查看启动的容器

[root@sail ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED        STATUS        PORTS     NAMES
96ed3fe3e7f1   centos    "/bin/bash"   17 hours ago   Up 17 hours             centos01

进入容器,创建一个文件

[root@sail ~]# docker attach 96ed3fe3e7f1
[root@96ed3fe3e7f1 /]# cd /home
[root@96ed3fe3e7f1 home]# touch test.java
[root@96ed3fe3e7f1 home]# ls
test.java
[root@96ed3fe3e7f1 home]# exit
exit

退出容器后,不管容器是否启动,都可以复制容器中的文件到主机上

[root@sail ~]# cd /home
[root@sail home]# docker cp 96ed3fe3e7f1:/home/test.java /home
[root@sail home]# ls
admin  f2  f3  sail  test.java

这种方式是一个手动过程,很不方便,推荐使用数据卷技术,可以实现自动同步主机和容器的目录。

详情见:Docker 12 数据卷

查看Docker内存占用

docker stats

语法

docker stats [参数] [容器...]

参数

  • a:查看所有容器的内存占用(默认只展示运行的容器)。
[root@sail home]# docker stats
CONTAINER ID   NAME       CPU %     MEM USAGE / LIMIT   MEM %     NET I/O   BLOCK I/O   PIDS
96ed3fe3e7f1   centos01   0.00%     524KiB / 1.694GiB   0.03%     0B / 0B   0B / 0B     1

[root@sail home]# docker stats -a
CONTAINER ID   NAME              CPU %     MEM USAGE / LIMIT   MEM %     NET I/O   BLOCK I/O   PIDS
0aee6f74b913   brave_rosalind    0.00%     0B / 0B             0.00%     0B / 0B   0B / 0B     0
c3d59f55d600   musing_poincare   0.00%     0B / 0B             0.00%     0B / 0B   0B / 0B     0
569026bc0955   centos03          0.00%     0B / 0B             0.00%     0B / 0B   0B / 0B     0
71a97b830ec5   centos02          0.00%     0B / 0B             0.00%     0B / 0B   0B / 0B     0
96ed3fe3e7f1   centos01          0.00%     524KiB / 1.694GiB   0.03%     0B / 0B   0B / 0B     1

Docker部署

部署Nginx

下载镜像

[root@sail home]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
e5ae68f74026: Pull complete 
21e0df283cd6: Pull complete 
ed835de16acd: Pull complete 
881ff011f1c9: Pull complete 
77700c52c969: Pull complete 
44be98c0fab6: Pull complete 
Digest: sha256:9522864dd661dcadfd9958f9e0de192a1fdda2c162a35668ab6ac42b465f0603
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

查看镜像

[root@sail home]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
nginx        latest    f652ca386ed1   7 days ago     141MB

运行镜像

[root@sail home]# docker run -d --name=nginx01 -p 3344:80 nginx
f58fb3ed8c5587d2c28567c865759438e449f2fd65889f2910286b9cd74debec
[root@sail home]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                  NAMES
f58fb3ed8c55   nginx     "/docker-entrypoint.…"   23 seconds ago   Up 22 seconds   0.0.0.0:3344->80/tcp   nginx01

测试验证

使用 curl 命令可以模拟网页访问,以此来测试 Nginx 启动情况。

[root@sail home]# curl localhost:3344
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>

外网访问测试

如果是使用阿里云服务器,需要先开启端口。

al

使用阿里云的公网 IP 即可进行访问。

Untitled

出现此页面,即代表 Nginx 部署成功。

查看启动的容器

[root@sail home]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                  NAMES
f58fb3ed8c55   nginx     "/docker-entrypoint.…"   12 minutes ago   Up 12 minutes   0.0.0.0:3344->80/tcp   nginx01

查看容器中 Nginx 目录

[root@sail home]# docker exec -it nginx01 /bin/bash
root@f58fb3ed8c55:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@f58fb3ed8c55:/# cd /etc/nginx
root@f58fb3ed8c55:/etc/nginx# ls
conf.d    fastcgi_params    mime.types  modules  nginx.conf  scgi_params  uwsgi_params

如此,如果需要修改 Nginx 的配置即可修改 nginx.conf 文件实现。

不过如果每次修改都要进入容器后再进行操作,是很繁琐的事,还是更推荐使用容器卷技术

部署原理

Untitled

部署Tomcat

启动Tomcat

[root@sail bin]# docker run -d -p 8080:8080 --name=tomcat01 tomcat
Unable to find image 'tomcat:latest' locally
latest: Pulling from library/tomcat
5e0b432e8ba9: Pull complete 
a84cfd68b5ce: Pull complete 
e8b8f2315954: Pull complete 
0598fa43a7e7: Pull complete 
e0d35e3be804: Pull complete 
8fc448a0c88b: Pull complete 
dbdff6e5955b: Pull complete 
5daf3771e3d8: Pull complete 
e4265b3badfc: Pull complete 
126f233cb97a: Pull complete 
Digest: sha256:429d5c140820d5eba38042823501d5f4e0f03b282133513e29c22d6358daa7c7
Status: Downloaded newer image for tomcat:latest
fe247e0ef80de961df2f73216b3c604d97094b9a35064f9bef421243e610e487

[root@sail bin]# docker ps
CONTAINER ID   IMAGE     COMMAND             CREATED              STATUS              PORTS                    NAMES
fe247e0ef80d   tomcat    "catalina.sh run"   About a minute ago   Up About a minute   0.0.0.0:8080->8080/tcp   tomcat01

这里选择直接启动的方式,若本地没有该镜像,则先从官方库拉取。

进入容器

[root@sail sail]# docker exec -it tomcat01 /bin/bash
root@fe247e0ef80d:/usr/local/tomcat# ls
BUILDING.txt  CONTRIBUTING.md  LICENSE    NOTICE    README.md  RELEASE-NOTES  RUNNING.txt  bin  conf  lib  logs  native-jni-lib  temp  webapps  webapps.dist  work

root@fe247e0ef80d:/usr/local/tomcat# cd webapps
root@fe247e0ef80d:/usr/local/tomcat/webapps# ls
root@fe247e0ef80d:/usr/local/tomcat/webapps#

这里发现一个问题,Tomcat 下的 webapps 没有文件,所以 Tomcat 的初始页面是不能显示的。

这也是 Docker 的精髓,只保留最核心的东西,剔除所有不必要的内容。

这也并非不可解决,webapps 的默认内容是存放在 webapps.dist 中的

root@fe247e0ef80d:/usr/local/tomcat# cd webapps.dist
root@fe247e0ef80d:/usr/local/tomcat/webapps.dist# ls
ROOT  docs  examples  host-manager  manager

将 webapps.dist 中的内容复制到 webapps 下

root@fe247e0ef80d:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@fe247e0ef80d:/usr/local/tomcat# cd webapps
root@fe247e0ef80d:/usr/local/tomcat/webapps# ls
ROOT  docs  examples  host-manager  manager

外网访问测试

Untitled

命令测试

root@fe247e0ef80d:/usr/local/tomcat/webapps# ll
bash: ll: command not found

这里又发现一个问题,ll 这种相对基础的命令也是没有的,如此也可以看出 Docker 极致的精简。


posted @ 2024-03-27 21:04  做梦的努力者  阅读(17)  评论(0编辑  收藏  举报