Docker好好学二(常用命令)

Docker常用命令

1、Docker常用命令

2、部署nginx、tomcat、ES+kibana

1、Docker常用命令

1.1 帮助命令

docker verion               # 显示 docker 的版本信息
docker info                 # 显示 docker 的系统信息, 包括镜像和容器的数量等
docker COMMAND --help       # 帮助命令

帮助文档的地址: Reference documentation | Docker Documentation

1.2 镜像命令

1、docker images docker image | Docker Documentation

[root@Oskari docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/centos    7                   8652b9f0cb4c        8 months ago        204 MB

# 解释
REPOSITORY                  # 镜像的仓库员
TAG                         # 镜像的标签
IMAGE ID                    # 镜像的id
CREATED                     # 镜像的创建时间
SIZE                        # 镜像的大小

# 可选项
-a                          # 列出所有镜像
-q                          # 指向是镜像的id

2、docker search 搜索镜像 docker search | Docker Documentation

[root@Oskari docker]# docker search mysql
INDEX       NAME                                        DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/mysql                             MySQL is a widely used, open-source relati...   11205     [OK]       
docker.io   docker.io/mariadb                           MariaDB Server is a high performing open s...   4259      [OK]       
docker.io   docker.io/mysql/mysql-server                Optimized MySQL Server Docker images. Crea...   833                  [OK]
docker.io   docker.io/percona                           Percona Server is a fork of the MySQL rela...   548       [OK]       
docker.io   docker.io/phpmyadmin                        phpMyAdmin - A web interface for MySQL and...   286       [OK] 

# 可选项
Name, shorthand Default Description
--filter , -f           Filter output based on conditions provided
--format                Pretty-print search using a Go template
--limit 25              Max number of search results
--no-trunc              Don't truncate output

# 通过收藏数量过滤
--filter=STARS=3000     # 搜索STARS数量大于3000的

[root@Oskari docker]# docker search mysql -f=stars=3000
INDEX       NAME                DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/mysql     MySQL is a widely used, open-source relati...   11205     
docker.io   docker.io/mariadb   MariaDB Server is a high performing open s...   4259

3、docker pull 拉取镜像 docker pull | Docker Documentation

# 下载镜像  docker pull IMAGENAME[:tag]
[root@Oskari docker]# docker pull mysql
Using default tag: latest           # 如果不写 tag ,  默认拉取最新版本
Trying to pull repository docker.io/library/mysql ... 
latest: Pulling from docker.io/library/mysql
33847f680f63: Pull complete         # 分层下载, docker image 核心 [联合文件系统]
5cb67864e624: Pull complete 
1a2b594783f5: Pull complete 
b30e406dd925: Pull complete 
48901e306e4c: Pull complete 
603d2b7147fd: Pull complete 
802aa684c1c4: Pull complete 
715d3c143a06: Pull complete 
6978e1b7a511: Pull complete 
f0d78b0ac1be: Pull complete 
35a94d251ed1: Pull complete 
36f75719b1a9: Pull complete 
Digest: sha256:8b928a5117cf5c2238c7a09cd28c2e801ac98f91c3f8203a8938ae51f14700fd # 签名
Status: Downloaded newer image for docker.io/mysql:latest # 真实地址

# 下面两条命令是一样的涵义
docker pull mysql
docker pull docker.io/mysql:latest

# 指定版本下载
[root@Oskari docker]# docker pull mysql:5.7
Trying to pull repository docker.io/library/mysql ... 
5.7: Pulling from docker.io/library/mysql
33847f680f63: Already exists            # 核心文件共用
5cb67864e624: Already exists 
1a2b594783f5: Already exists 
b30e406dd925: Already exists 
48901e306e4c: Already exists 
603d2b7147fd: Already exists 
802aa684c1c4: Already exists 
5b5a19178915: Pull complete 
f9ce7411c6e4: Pull complete 
f51f6977d9b2: Pull complete 
aeb6b16ce012: Pull complete 
Digest: sha256:be70d18aedc37927293e7947c8de41ae6490ecd4c79df1db40d1b5b5af7d9596
Status: Downloaded newer image for docker.io/mysql:5.7

[root@Oskari docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/mysql     5.7                 8cf625070931        12 days ago         448 MB
docker.io/mysql     latest              c60d96bd2b77        12 days ago         514 MB
docker.io/centos    7                   8652b9f0cb4c        8 months ago        204 MB

4、docker rmi 删除镜像

docker rmi IMAGENAME / IMAGE ID

# 批量删除
docker rmi -f $(docker images -aq)  # 查出所有镜像id, 递归删除

1.3 容器命令

下载一个CentOS镜像来测试学习

docker pull centos

新建容器并启动

docker run [ARGS] IMAGENAME 
# 参数说明
--name="NAME"               # 容器别称, 用来区分不同容器
-d                          # 后来方式运行
-it                         # 使用交互方式运行,进入容器查看内容
-p                          # 指定容器的端口 -p 8080:8080
    -p ip:主机端口:容器端口
    -p 主机端口:容器端口(常用)
    -p 容器端口
-P   随机指定端口
# 测试 启动并进入容器
[root@Oskari docker]# docker run -it centos /bin/bash
[root@1df2f1c76ad1 /]# ls # 查看容器内的centos, 基础版本, 很多命令都不是完善的.
# 从容器中退出主机
[root@1df2f1c76ad1 /]# exit 
[root@Oskari docker]

列出所有的运行的容器

# docker ps             列出正在运行的容器
# docker ps -a          列出当前正在运行的容器+历史运行过的容器
# docker ps -n=?        显示最近创建的容器  ? number  指个数
# docker ps -q          只显示容器的编号
[root@Oskari docker]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@Oskari docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
1df2f1c76ad1        centos            "/bin/bash"         18 minutes ago      Exited (0) 8 seconds ago                       agitated_heyrovsky
[root@Oskari docker]#

退出容器

exit            # 停止容器并退出
Ctrl+P+Q        # 保持容器运行并退出

删除容器

docker rm 容器id                   # 删除单个容器
docker rm 容器id 容器id             # 删除多个容器
docker rm -f $(docker ps -aq)       # 删除所有容器
docker ps -aq|xargs docker rm       # 删除所有容器

启动和停止容器的操作

docker start 容器id       # 启动容器
docker restart 容器id     # 重启容器
docker stop 容器id        # 停止当前正在运行的容器
docker kill 容器id        # 强制停止容器

1.4 容器命令

后台启动容器

# 命令 docker run -d IMAGENAME
[root@Oskari docker]# docker run -d centos
# 问题: docker ps 发现 centos 停止了
# 常见的坑: docker 容器使用后台运行, 就必须要有一个前台进程. docker发现没有应用, 就会自动停止

查看日志

# docker logs

[root@Oskari docker]# docker logs --help

Usage:  docker logs [OPTIONS] CONTAINER

Fetch the logs of a container

Options:
      --details        Show extra details provided to logs
  -f, --follow         Follow log output
      --help           Print usage
      --since string   Show logs since timestamp
      --tail string    Number of lines to show from the end of the logs (default "all")
  -t, --timestamps     Show timestamps
[root@Oskari docker]# docker logs -tf --tail 10 CONTAINER-ID # 查看某容器最后10条日志

查看容器中的进程信息

docker top CONTAINERID # 查看运行中的容器的进程

查看镜像的元数据

docker inspect containerid

进入当前正在运行的容器

# 容器通常设定为后台运行. 如果有进入容器的需要
[root@Oskari docker]# docker exec -it 25d00508c3f9 /bin/bash    # 通过exec进入容器, 并创建一个 /bin/bash 进程
[root@Oskari docker]# docker attach 25d00508c3f9                # 通过attach进入容器, 进入正在运行的进程, 并不会创建进程

容器内拷贝文件到宿主机上

# docker cp 
# 进入容器, 创建要拷贝的文件
[root@Oskari docker]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
ef0508f169f9        centos:7            "/bin/bash"         2 minutes ago       Up 2 minutes                            tender_darwin
[root@Oskari docker]# docker attach ef0508f169f9
[root@ef0508f169f9 home]# ls
test.txt
[root@ef0508f169f9 home]# exit
# 退出容器, 进入宿主机, 可以不在意容器运行状态, 只要容器存在即可
[root@Oskari home]# pwd
/home
[root@Oskari home]# docker cp ef0508f169f9:/home/test.txt /home
[root@Oskari home]# ls
test.txt
[root@Oskari home]# cat test.txt 
test file from ef0508f169f9
[root@Oskari home]# 

# docker cp containerid:/path /path 
# 拷贝是一个手动过程, 未来我们可以使用 -v 卷的技术, 做到数据自动同步

2、部署nginx、tomcat、ES+kibana

2.1 部署nginx

搜索镜像

[root@Oskari home]# docker search nginx

拉取镜像

[root@Oskari home]# docker pull nginx

后台方式启动Nginx镜像并重命名

[root@Oskari home]# docker run -d --name nginx01 -p 3344:80 nginx # 3344为宿主机端口,80为容器内部端口
0095b1e54ed30f6b71da17e6e975fe4af7982b58ec6b6b5c1efe19618a374f7d
[root@Oskari home]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
0095b1e54ed3        nginx               "/docker-entrypoin..."   4 seconds ago       Up 2 

测试环境安装结果

[root@Oskari home]# curl localhost:3344
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    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>
[root@Oskari home]#

问题: 每次改动nginx配置文件, 都需要进入容器内部, 是分麻烦. 如果可以在容器外部提供一个映射路径, 达到在容器外部修改文件, 容器内部就可以自动修改? TIPS: -v 挂载卷

2.2 部署tomcat

# 官方推荐命令 , 携带版本
docker run -it --rm tomcat:9.0 # 指定下载9.0版本
# 我们之前的启动都是后台, 停止容器之后, 容器还是可以查到.  --rm 在容器停止后会删除该镜像

启用一个新的tomcat容器, 别名 tomcat01, 宿主机使用3355映射容器的8080端口

docker run -d -p 3355:8080 --name tomcat01 tomcat

2.3 部署ES+kibana

# es 暴露端口较多
# es 占用内存较多
# es 需要将数据放置到安全目录! 挂载

# 安装镜像,启动容器
[root@Oskari home]# docker run -d --name es01 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2 
# docker stats 查看 docker 内核运行状态
# 测试es是否安装成功
[root@Oskari home]# curl localhost:9200
{
  "name" : "0a772db1fcba",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "pFUYgLbEQWOUeVEdShsplQ",
  "version" : {
    "number" : "7.6.2",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
    "build_date" : "2020-03-26T06:34:37.794943Z",
    "build_snapshot" : false,
    "lucene_version" : "8.4.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}
[root@Oskari home]# 
# 增加 es 内存限制 -e 环境配置修改
[root@Oskari home]# docker run -d --name es02 -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS="-Xms64m -Xmx512m" -e "discovery.type=single-node" elasticsearch:7.6.2

2.4 可视化管理

  • portainer (先用这个)
[root@Oskari home]# docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
  • Rancher (CI/CD再用)

什么是 portainer ?

Docker 图形化界面管理工具! 提供一个后台面板供我们操作!

[root@Oskari home]# docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

end
  • 作者:旭仔(联系作者)
  • 发表时间:2024-05-31 19:19
  • 版权声明:自由转载-非商用-非衍生-保持署名
  • 转载声明:如果是转载栈主转载的文章,请附上原文链接
  • 公众号转载:请在文末添加作者公众号二维码(公众号二维码见右边,欢迎关注)
  • 评论