4.docker常用命令

0x01. 帮助命令

docker version                # 查看docker版本信息
docker info                      # 查看docker的系统信息, 包括镜像和容器数量
docker 命令 --hlep          # 查看命令帮助

帮助文档 : https://docs.docker.com/reference/

image-20210405102617556

0x02. 镜像命令

docker images # 查看本地主机上的所有镜像

[root@centos7 docker]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    d1165f221234   4 weeks ago   13.3kB

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

# 可选项
-a, --all                        列出所有镜像
-q, --quiet                   只显示镜像的id

docker search # 搜索镜像

[root@centos7 docker]# docker search mysql
NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   10702     [OK]       
mariadb                           MariaDB Server is a high performing open sou…   4023      [OK]       
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   784                  [OK]

# 可选项
--filter=stars=5000         # 搜索镜像stars大于5000的

image-20210405104055910

docker pull # 下载镜像

# 下载镜像 docker pull 镜像名[:tag]
[ root@kuangshen / ]# docker pull mysql
Using default tag: latest                    # 如果不写tag, 默认就是latest
latest: Pulling from library / mysql
5b54d594fba7 : Pull complete          # 分层下载 docker image的核心  联合文件系统
07e7d6a8a868: Pull complete
abd946892310: Pull complete
dd8f4d07efa5: Pull complete
076d396a6205:Pull complete
cf6b2b93048f: Pull complete
530904b4a8b7: Pull complete
fb1e55059a95: Pull complete
4bd29a0dcde8: Pull complete
b94a001c6ec7 : Pull complete
cb77cbeb422b:Pull complete
2a35cdbd42cc : Pull complete
Digest: sha256:dc255ca50a42b3589197000b1f9bab2b4e010158d1a9f56c3db6ee145506f625 # 签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest   # 真实地址

# 等价命令
docker pull mysql
docker pull docker.io/library/mysql:latest

# 指定版本下载
[root@kuangshen /]#docker pu11 mysql:5.7
5.7:Pu11ing from 1ibrary / mysql
5b54d594fba7 : Already exists
07e7d6a8a868: Already exists
abd946892310:Already exists
dd8f4d07efa5 : Already exists
076d396a6205: Already exists
cf6b2b93048f: Already exists
530904b4a8b7 : Already exists
a37958cbebcf : pu11 complete
04960017f638: Pu11 complete
e1285defod2a: pu11 complete
670cb3a9678e : pu11 complete
Digest: sha256:e4d39b85118358ffef6adc5e8c7d00e49d20b25597e6ffdc994696f10e3dc8e2
status : Downloaded newer image for mysq7:5.7
docker.io/1ibrary/mysq1:5.7

docker rmi # 删除镜像

[root@centos7 ~]# docker rmi -f 镜像id                  				 删除指定镜像
[root@centos7 ~]# docker rmi -f 镜像id 镜像id 镜像id 镜像id               删除多个镜像
[root@centos7 ~]# docker rmi -f $(docker images -aq)                       删除所有镜像

0x03. 容器命令

只有有了镜像才能创建容器, 所以下载一个CentOS镜像做演示

docker pull centos

新建容器并启动

docker run [可选参数] image

# 参数说明
--name="Name"               容器名字  tomcat01 tomcat02
-d                                       后台方式运行
-it                                       使用交互方式运行,进入容器查看内容
-p(小写)                              指定容器的端口   8080:8080
	-p ip:主机端口:容器端口
	-p 主机端口:容器端口
	-p 容器端口
-P(大写)                              随机指定容器的端口

# 测试启动并进入容器
[root@centos7 docker]# docker run -it centos /bin/bash
[root@620f48b666fb /]# ls                  查看内部的centos,基础版本,很多命令都没有
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

列出所有运行的容器

docker ps      # 列出当前正在运行的容器

# 可选参数
-a             列出当前正在运行的容器+历史运行过的容器
-n=?        显示最近创建的容器
-q             只显示容器的编号

退出容器

exit      # 直接停止容器并退出ctrl + p + q    # 容器不停止退出

删除容器

docker rm 容器id                            # 删除指定容器,正在运行的容器是不能删除的, 但是可以强制删除 rm -fdocker rm -f $(docker ps -aq)        # 删除所有的容器docker ps -a -q | xargs docker rm  # 删除所有容器

启动和停止容器的操作

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

0x04. 常用的其他命令

后台启动容器

# 命令 docker run -d 镜像名[root@centos7 /]# docker run -d centoscc8ce50168e0fba39d78056112ced18bc18febfd88cfeaf3a53e55d9a3d701bb# 问题docker ps , 发现 centos 停止了# 常见的坑 docker 容器使用户后台运行, 就必须要有一个前台进程, docker发现没有应用, 就会自动停止# nginx, 容器启动后, 发现自己没有提供服务, 就会立即停止, 就是没有程序了

查看日志

docker logs -f -t --tail 10 容器id , 默认没有操作就没有日志# 自己编写一段shell脚本[root@centos7 /]# docker run -d centos /bin/sh -c "while true;do echo alex;sleep 1;done"d022b021e8f5187b37f585ca106678667da3fa6ac77bb597aa891cbb9a011eed# 显示日志[root@centos7 /]# docker logs -tf --tail 10 d022b021e8f5

查看容器中的进程信息

# 命令 docker top 容器id[root@centos7 /]# docker top d022b021e8f5UID                 PID                 PPID                C                   STIME               TTY                 TIME               root                9239                9219                0                   12:03               ?                   00:00:00            root                9870                9239                0                   12:10               ?                   00:00:00          

查看镜像中的元数据

[root@centos7 /]# docker inspect d022b021e8f5[    {        "Id": "d022b021e8f5187b37f585ca106678667da3fa6ac77bb597aa891cbb9a011eed",        "Created": "2021-04-05T04:03:02.80196498Z",        "Path": "/bin/sh",        "Args": [            "-c",            "while true;do echo alex;sleep 1;done"        ],        "State": {            "Status": "running",            "Running": true,            "Paused": false,            "Restarting": false,            "OOMKilled": false,             ...................................             id是前12位的缩写网路用的是桥接网络

进入当前正在运行的容器

# 我们通常都是使用户后台的方式运行容器, 需要进入容器, 修改一些配置# 方式1docker exec -it 容器id bashShell# 测试[root@centos7 /]# docker exec -it d022b021e8f5 /bin/bash[root@d022b021e8f5 /]# lsbin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var# 方式2docker attach 容器id# 测试[root@centos7 /]# docker attach d022b021e8f5正在执行的当前代码# docker exec                 进入容器后开启一个新的终端, 可以在里面操作(常用)# docker attach              进入容器正在执行的终端, 不会启动新的进程

从容器内copy文件到主机

docker cp 容器id:容器内路径    目的主机的路径# 进入容器内部[root@centos7 ~]# docker exec -it d022b021e8f5 /bin/bash[root@d022b021e8f5 /]# cd /home[root@d022b021e8f5 home]# ls# 在容器内创建一个文件[root@d022b021e8f5 home]# touch test.py [root@d022b021e8f5 home]# exit# 将文件copy到主机上[root@centos7 ~]# docker cp d022b021e8f5:/home/test.py /home[root@centos7 ~]# cd /home[root@centos7 home]# lshacker  mhx  test.py  yuanmengen# 拷贝是一个手动过程, 未来我们使用 -v 卷的技术, 可以实现

0x05. 小结

image-20210405140433524

0x06. 作业练习

dcoker 部署 nginx, 并上线运行测试

# 1.搜索镜像[root@centos7 home]# docker search nginx# 2.下载镜像[root@centos7 home]# docker pull nginx# 3.启动容器[root@hecs-x-medium-2-linux-20200618092102 /]# docker run -d --name nginx01 -p 3344:80 nginx1a9ff84936519709e31bec20500f927df2b88e68490fb92c31fd52fcd4c5b228[root@hecs-x-medium-2-linux-20200618092102 /]# docker psCONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                  NAMES1a9ff8493651   nginx     "/docker-entrypoint.…"   5 seconds ago   Up 4 seconds   0.0.0.0:3344->80/tcp   nginx01# 4.进入容器[root@hecs-x-medium-2-linux-20200618092102 /]# docker exec -it nginx01 /bin/bashroot@1a9ff8493651:/# whereis nginxnginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx# 5.测试nginx服务root@1a9ff8493651:/# curl localhost:80<!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 andworking. 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>

外网访问 :

image-20210405140119106

端口暴露的概念 :

image-20210405132618407

思考问题 : 我们每次改动nginx配置文件, 都需要进入容器内部? 十分的麻烦, 我们要是可以在容器外部提供一个映射路径, 达到在容器修改文件, 容器内部就可以自动修改? -v 数据卷! 技术

docker 部署 tomcat 上线测试

# 官方的使用docker run -it --rm tomcat:9.0# 我们之前的启动都是后台, 停止了容器之后, 容器还是可以查到   # docker run -it --rm 一般用来测试,用完就自动删除容器# 下载后再启动[root@hecs-x-medium-2-linux-20200618092102 /]# docker pull tomcat# 启动容器[root@hecs-x-medium-2-linux-20200618092102 /]# docker run -d -p 8881:8080 --name tomcat01 tomcat# 测试外网访问没问题但是是404页面# 进入容器一探究竟[root@hecs-x-medium-2-linux-20200618092102 /]# docker exec -it tomcat01 /bin/bash# 发现问题linux命令少了, 没有webapps      阿里云镜像的原因,默认是最小的镜像, 所以不必要的都剔除掉了保证最小可运行的环境, 但是我们可以把失去的都搞过来只需要把webapps.dist里面的内容copy到webapps中即可cp -r webapps.dist/* webapps/

image-20210405143406578

思考问题: 我们以后要部署项目, 如果每次都要进入容器是不是十分麻烦? 我们要是可以在容器外部提供一个映射路径, webapps, 我们在外部放置项目, 就自动同步到内部就好了

docker 部署 es+kibana

# es 暴露的端口很多# es 十分耗内存# es 的数据一般需要放置到安全目录! 挂载# --net somenetwork  网络配置(后面讲)# 启动elasticsearchdocker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2# 启动了 linux 就很卡  docker stats  查看 cpu 的状态# es 是十分耗内存的    1.xG    1核2G

这就是elasticsearch , 太耗内存了

image-20210405145455000

测试成功后, 建议立即停掉, 然后添加内存限制

# 1.修改配置文件    -e    环境配置修改docker run -d --name elasticsearch02 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2

image-20210405150439003

# 测试[root@hecs-x-medium-2-linux-20200618092102 /]# curl localhost:9200{  "name" : "8e6646cac33b",  "cluster_name" : "docker-cluster",  "cluster_uuid" : "RaVBWjK5QgGebq-dlG_DJg",  "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"}

思考问题 : 使用kibana连接es? 网络如何才能连接过去

image-20210405150628981

posted @ 2021-12-20 18:53  Mn猿  阅读(111)  评论(0编辑  收藏  举报