105.【Docker】(四)

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 105.【Docker】
Docker命令大全
docker attach #连接到正在运行中的容器
docker build  #使用 Dockerfile 创建镜像
docker builder  #管理builds
    docker builder prune  #清除build缓存
docker checkpoint #管理checkpoints
    docker checkpoint create  #从正在运行的容器创建检查点
    docker checkpoint ls  #列出容器的检查点
    docker checkpoint rm  #删除指定的检查点
docker commit #从容器创建一个新的镜像
docker config #管理Docker配置
    docker config create  #创建配置文件
    docker config inspect #查看配置文件信息
    docker config ls    #显示docker里已经保存得配置文件
    docker config rm    #删除配置文件
docker container  #管理容器
    docker container prune  #删除所有已停止的容器
docker context  #管理contexts
    docker context create #创建一个上下文
    docker context export #将上下文导出到tar或kubecconfig文件中
    docker context import #从tar或zip文件导入上下文
    docker context inspect  #在一个或多个上下文上显示详细信息
    docker context ls   #列出上下文
    docker context rm   #删除一个或多个上下文
    docker context update #更新
    docker context use    #设置当前docker的上下文
docker cp   #用于容器与主机之间的数据拷贝
docker create #创建一个新的容器但不启动它
docker diff   #检查容器里文件结构的更改
docker events #从服务器获取实时事件
docker exec   #在运行的容器中执行命令
docker export #将文件系统作为一个tar归档文件导出到STDOUT
docker history  #查看指定镜像的创建历史
docker image  #管理镜像
    docker image inspect  #显示一个或多个镜像的元数据
    docker image ls     #列出本地镜像
    docker image prune    #删除没有使用的镜像
    docker image rm     #删除一个或多个镜像
docker images #列出本地镜像
docker import #从归档文件中创建镜像
docker info   #显示 Docker 系统信息,包括镜像和容器数
docker inspect  #获取容器/镜像的元数据
docker kill   #杀掉一个运行中的容器
docker load   #导入使用 docker save 命令导出的镜像
docker login  #登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
docker logout #登出一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
docker logs   #获取容器的日志
docker manifest #管理manifest(实验,不应用于生产环境)
    docker manifest annotate  #向本地镜像清单添加附加信息
    docker manifest create    #创建用于注释和推入注册表的本地清单列表
    docker manifest inspect   #显示镜像清单或清单列表
    docker manifest push    #将清单列表推入仓库
    docker manifest rm      #从本地存储中删除一个或多个清单列表
docker network  #管理网络
    docker network connect    #将容器连接到网络
    docker network create   #创建一个网络
    docker network disconnect #断开容器的网络
    docker network inspect    #显示一个或多个网络的元数据
    docker network ls     #列出网络
    docker network prune    #删除所有没有使用的网络
    docker network rm     #删除一个或多个网络
docker node   #管理集群(swarm)节点
    docker node demote      #从群集(swarm)管理器中降级一个或多个节点
    docker node inspect     #显示一个或多个节点的元数据
    docker node ls        #列出群集(swarm)中的节点
    docker node promote     #将一个或多个节点推入到群集管理器中
    docker node ps        #列出在一个或多个节点上运行的任务,默认为当前节点
    docker node rm        #从群集(swarm)删除一个或多个节点
    docker node update      #更新一个节点
docker pause  #暂停容器中所有的进程
docker plugin #管理插件
    docker plugin create    #从rootfs和配置创建一个插件。插件数据目录必须包含config.json和rootfs目录。
    docker plugin disable   #禁用插件
    docker plugin enable    #启用插件
    docker plugin inspect   #显示一个或多个插件的元数据
    docker plugin install   #安装一个插件
    docker plugin ls      #列出所有插件
    docker plugin push      #将插件推送到注册表
    docker plugin rm      #删除一个或多个插件
    docker plugin set     #更改插件的设置
    docker plugin upgrade   #升级现有插件
docker port   #列出指定的容器的端口映射,或者查找将PRIVATE_PORT NAT到面向公众的端口
docker ps   #列出容器
docker pull   #从镜像仓库中拉取或者更新指定镜像
docker push   #将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
docker rename #重命名容器
docker restart  #重启容器
docker rm   #删除一个或多个容器
docker rmi    #删除一个或多个镜像
docker run    #创建一个新的容器并运行一个命令
docker save   #将指定镜像保存成 tar 归档文件
docker search #从Docker Hub查找镜像
docker secret #管理Docker secrets
    docker secret create  #从文件或STDIN创建一个秘密作为内容
    docker secret inspect #显示有关一个或多个秘密的详细信息
    docker secret ls    #列出秘密
    docker secret rm    #删除一个或多个秘密
docker service  #管理服务
    docker service create #创建一个服务
    docker service inspect  #查看服务的元数据
    docker service logs   #获取服务的日志
    docker service ls   #列出服务
    docker service ps   #列出一个或多个服务的任务
    docker service rm   #删除一个或多个服务
    docker service rollback #将更改恢复到服务的配置
    docker service scale  #缩放一个或多个复制服务
    docker service update #更新服务
docker stack  #管理堆栈
    docker stack deploy   #部署新的堆栈或更新现有堆栈
    docker stack ls     #列出现有堆栈
    docker stack ps     #列出堆栈中的任务
    docker stack rm     #删除堆栈 
    docker stack services #列出堆栈中的服务
docker start  #启动一个或多个已经被停止的容器
docker stats  #显示容器的实时流资源使用统计信息
docker stop   #停止一个运行中的容器
docker swarm  #管理集群(Swarm)
    docker swarm ca     #查看或旋转当前群集CA证书。此命令必须针对管理器节点
    docker swarm init   #初始化一个群集(Swarm)
    docker swarm join   #加入群集作为节点和/或管理器
    docker swarm join-token #管理加入令牌
    docker swarm leave    #离开群集(Swarm)
    docker swarm unlock   #解锁群集(Swarm)
    docker swarm unlock-key #管理解锁钥匙
    docker swarm update   #更新群集(Swarm)
docker system #管理Docker
    docker system df    #显示docker磁盘使用情况
    docker system events  #从服务器获取实时事件
    docker system info    #显示系统范围的信息
    docker system prune   #删除未使用的数据
docker tag    #标记本地镜像,将其归入某一仓库
docker top    #查看容器中运行的进程信息,支持 ps 命令参数
docker trust  #管理Docker镜像的信任
    docker trust inspect  #返回有关key和签名的低级信息
    docker trust key    #管理登入Docker镜像的keys
      docker trust key generate #生成并加载签名密钥对
    docker trust key load   #加载私钥文件以进行签名
    docker trust revoke   #删除对镜像的认证
    docker trust sign   #镜像签名
    docker trust signer   #管理可以登录Docker镜像的实体
      docker trust signer add   #新增一个签名者
    docker trust signer remove  #删除一个签名者
docker unpause  #恢复容器中所有的进程
docker update #更新一个或多个容器的配置
docker version  #显示 Docker 版本信息
docker volume #管理volumes
    docker volume create  #创建一个卷
    docker volume inspect #显示一个或多个卷的元数据
    docker volume ls    #列出卷
    docker volume prune   #删除所有未使用的卷
    docker volume rm    #删除一个或多个卷
docker wait   #阻塞运行直到容器停止,然后打印出它的退出代码

(四)、Docker部署软件实践

1.Docker安装Nginx

docker search nginx  #搜索
 docker pull nginx  #拉去
 docker images  # 查看镜像
# -d后台运行 
#--name给容器命名
#-p宿主机端口:容器内部端口
 docker run -d  --name nginx01 -p 3344:80 nginx  # 创建容器并启动
 curl localhost:3344  #运行测试

端口暴露的概念

开启安全组3344

利用外网也能访问的到

[root@Jsxs ~]# docker ps   #查看正在运行的容器
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                                   NAMES
ec573efd8a87   nginx     "/docker-entrypoint.…"   23 minutes ago   Up 23 minutes   0.0.0.0:3344->80/tcp, :::3344->80/tcp   nginx01
[root@Jsxs ~]# docker exec -it nginx01 /bin/bash   #以交互式的方式启动名字叫做nginx01的容器
root@ec573efd8a87:/# whereis nginx   #查找配置
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@ec573efd8a87:/# cd /etc/nginx  #进入配置地址
root@ec573efd8a87:/etc/nginx# exit   #离开,但是后台还在
exit
[root@Jsxs ~]#docker ps   #查看正在运行的
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                                   NAMES
ec573efd8a87   nginx     "/docker-entrypoint.…"   32 minutes ago   Up 32 minutes   0.0.0.0:3344->80/tcp, :::3344->80/tcp   nginx01
[root@Jsxs ~]# docker stop ec573efd8a87  #停止
ec573efd8a87

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

2.Docker安装Tomcate

# 我们之前的启动器都是后台,停止容器之后,容器还是可以查到。 这种方式一般是
#用完就删除,常常用于测试。
docker run -it --rm tomcat:9.0
[root@Jsxs ~]# docker ps   #查找正在运行的
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@Jsxs ~]# docker ps -a  #查找历史记录
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS                      PORTS     NAMES
ec573efd8a87   nginx     "/docker-entrypoint.…"   44 minutes ago   Exited (0) 11 minutes ago             nginx01
48fa8f942572   centos    "/bin/bash"              14 hours ago     Exited (0) 14 hours ago               heuristic_cerf
-----------------------------------------------------------------
docker pull tomcat:9.0   #拉去指定版本
docker images  #查看镜像
docker run -d -p 3355:8080 --name tomcat01 tomcat:9.0  # 后台 端口映射 名字 镜像:tage

配置安全组

外网访问成功!

docker exec -it tomcat01 /bin/bash 
root@db99d2ee658c:/usr/local/tomcat# ll
bash: ll: command not found
root@db99d2ee658c:/usr/local/tomcat# ls -al
total 172
drwxr-xr-x 1 root root  4096 Dec 22  2021 .
drwxr-xr-x 1 root root  4096 Mar 22 01:32 ..
-rw-r--r-- 1 root root 18970 Dec  2  2021 BUILDING.txt
-rw-r--r-- 1 root root  6210 Dec  2  2021 CONTRIBUTING.md
-rw-r--r-- 1 root root 57092 Dec  2  2021 LICENSE
-rw-r--r-- 1 root root  2333 Dec  2  2021 NOTICE
-rw-r--r-- 1 root root  3378 Dec  2  2021 README.md
-rw-r--r-- 1 root root  6898 Dec  2  2021 RELEASE-NOTES
-rw-r--r-- 1 root root 16507 Dec  2  2021 RUNNING.txt
drwxr-xr-x 2 root root  4096 Dec 22  2021 bin
drwxr-xr-x 1 root root  4096 Mar 22 01:31 conf
drwxr-xr-x 2 root root  4096 Dec 22  2021 lib
drwxrwxrwx 1 root root  4096 Mar 22 01:31 logs
drwxr-xr-x 2 root root  4096 Dec 22  2021 native-jni-lib
drwxrwxrwx 2 root root  4096 Dec 22  2021 temp
drwxr-xr-x 2 root root  4096 Dec 22  2021 webapps
drwxr-xr-x 7 root root  4096 Dec  2  2021 webapps.dist
drwxrwxrwx 2 root root  4096 Dec  2  2021 work
root@db99d2ee658c:/usr/local/tomcat# cd webapps
root@db99d2ee658c:/usr/local/tomcat/webapps# ls
报出404错误,说明可以访问,但是tomcat有问题,不完整
# 发现问题: 1.linux命令少 2.没有webapps、阿里云镜像的原因,默认是最小的镜像,所有不必要的都剔除掉
# 保证
----------------------------------------------------------------------
[root@Jsxs ~]# docker ps   #查看正在运行的容器
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@Jsxs ~]# docker ps -a  #查看历史且存在的容器
CONTAINER ID   IMAGE        COMMAND                  CREATED        STATUS                     PORTS     NAMES
db99d2ee658c   tomcat:9.0   "catalina.sh run"        2 hours ago    Exited (143) 2 hours ago             tomcat01
ec573efd8a87   nginx        "/docker-entrypoint.…"   3 hours ago    Exited (0) 3 hours ago               nginx01
48fa8f942572   centos       "/bin/bash"              16 hours ago   Exited (0) 16 hours ago              heuristic_cerf
[root@Jsxs ~]# docker start db99d2ee658c  #启动容器
db99d2ee658c
[root@Jsxs ~]# curl localhost:3355  #测试
<!doctype html><html lang="en"><head><title>HTTP Status 404 – Not Found</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 404 – Not Found</h1><hr class="line" /><p><b>Type</b> Status Report</p><p><b>Description</b> The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.</p><hr class="line" /><h3>Apache Tomcat/9.0.56</h3></body></html>[root@Jsxs ~]# docker exec -it tomcat01 /bin/bash
root@db99d2ee658c:/usr/local/tomcat# ^C
root@db99d2ee658c:/usr/local/tomcat# whereis tomcat  #查看目录
tomcat: /usr/local/tomcat
root@db99d2ee658c:/usr/local/tomcat# cd /usr/local/tomcat/webapps
root@db99d2ee658c:/usr/local/tomcat/webapps# ls
root@db99d2ee658c:/usr/local/tomcat/webapps# cd ..
root@db99d2ee658c:/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@db99d2ee658c:/usr/local/tomcat# webapps.dist/
bash: webapps.dist/: Is a directory
root@db99d2ee658c:/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@db99d2ee658c:/usr/local/tomcat# cd webapps.dist
root@db99d2ee658c:/usr/local/tomcat/webapps.dist# ls
ROOT  docs  examples  host-manager  manager
root@db99d2ee658c:/usr/local/tomcat/webapps.dist# cd ..
# 复制文件webapps.dist目录下的文件 复制得到 webapps
root@db99d2ee658c:/usr/local/tomcat# cp -r  webapps.dist/* webapps
root@db99d2ee658c:/usr/local/tomcat# cd webapps
root@db99d2ee658c:/usr/local/tomcat/webapps# ls
ROOT  docs  examples  host-manager  manager

再次测试:访问成功!!

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

从以前的删库跑路 到现在的删容器跑路

3.Docker部署es+kilbana

es 暴漏的端口很多
es 十分的消耗内存
es 的数据一般需要放置到安全目录! 挂载
# es 暴露的端口很多!
# es 十分耗内存
# es 的数据一般需要放置到安全目录!挂载
# --net somenetwork ? 网络配置
# 启动elasticsearch
 [root@iz2zeak7sgj6i7hrb2g862z ~]# docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
    安装后会很卡
 # 测试一下es是否成功启动
➜  ~ curl localhost:9200
{
  "name" : "d73ad2f22dd3",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "atFKgANxS8CzgIyCB8PGxA",
  "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"
}
 #测试成功就关掉elasticSearch,防止耗内存
 [root@iz2zeak7sgj6i7hrb2g862z ~]# docker stats  # 查看docker容器使用内存情况
-------------------------------------------------------------------------------------------------------
 #测试成功就关掉elasticSearch,可以添加内存的限制,修改配置文件 -e 环境配置修改(看自己的容器号,这个可能也是copy别人的,所以号不一样)
➜  ~ docker rm -f d73ad2f22dd3            # stop命令也行                               
 ➜  ~ docker run -d --name elasticsearch01 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2
 docker stats
CONTAINER ID   NAME              CPU %     MEM USAGE / LIMIT     MEM %     NET I/O     BLOCK I/O       PIDS
56d4fde935d2   elasticsearch01   0.52%     395.9MiB / 1.795GiB   21.54%    656B / 0B   106MB / 729kB   43
------------------------------------------------------------
 [root@abc ~]# curl localhost:9200
{
  "name" : "56d4fde935d2",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "VCzCca-fRmCpeINIBPUoTQ",
  "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"
}

执行原理

4.可视化管理工具

  • portainer(先用这个,这个不是最佳选择)
  • 一个docker图形化管理工具

什么是portainer?

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

1.安装

# 下载,安装,测试
docker run -d -p 8088:9000 \
--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
# 这时候就可以打开外网地址访问8088接口了

除了外网访问也可以内网访问
 curl localhost:8088

选择本地

进去之后...

相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。 &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
6月前
|
监控 Linux 持续交付
认识Docker
认识Docker
49 0
|
6月前
|
监控 应用服务中间件 nginx
|
5月前
|
存储 API 持续交付
Docker介绍(一)
Docker是开源的应用容器引擎,让开发者打包应用及依赖到可移植容器中,可在任何环境一致运行。它提供快速启动、高效资源利用、轻松迁移和维护,适用于开发、测试和生产。Docker由客户端、守护进程、REST API组成,支持镜像存储在仓库如Docker Hub。容器是隔离的执行环境,能在同一主机上互不影响地运行多个容器。
|
6月前
|
存储 程序员 Linux
什么是 Docker ?
本文介绍了容器技术的起源和Docker这一容器技术的简介。在传统开发过程中,环境搭建的重复性工作浪费了大量时间和资源。为了解决这个问题,容器技术应运而生,它减少了环境重复搭建的需求,提高了效率。相较于虚拟机,容器更轻量级,启动快速,资源利用率更高。Docker作为流行的容器技术,可以固化配置、自动化CI/CD流程、实现应用隔离、快速扩容缩容以及节省成本。Docker由客户端、守护进程和注册表服务组成,其核心概念包括镜像、容器和仓库。
|
12月前
|
Java Shell Linux
Docker使用总结
Docker使用总结
122 0
|
NoSQL Java Linux
|
Java Linux 虚拟化
|
Linux Docker Python
JupyterNotebook-Docker版
制作jupyter notebook的docker镜像,兼容numpy, pandas, matplotlib, pyspark, opencv-python, requests, flask等组件。
450 0
|
运维 安全 Ubuntu
[ docker ] 一篇文章让你掌握 docker
相信大家对docker都不陌生,这篇文章来分享一下个人对docker的理解。 在此之前,我翻阅了很多的资料,也看了不少的文章。 总结来说,就是每个人都会有自己独特的见解,有的是为了跟进先进主流技术,有的由于面试需要,有的由于项目要用等等的。 我总结的也不一定就是最准确的,只能能对大家更好的去理解docker有一些帮助,可以对docker有一个自己的认知。
349 0
[ docker ] 一篇文章让你掌握 docker