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

选择本地

进去之后...

相关实践学习
通过workbench远程登录ECS,快速搭建Docker环境
本教程指导用户体验通过workbench远程登录ECS,完成搭建Docker环境的快速搭建,并使用Docker部署一个Nginx服务。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
1月前
|
缓存 Linux 调度
Docker介绍
Docker介绍
117 0
|
9月前
|
NoSQL 安全 Redis
|
1月前
|
存储 运维 持续交付
|
20天前
|
Java Linux 虚拟化
|
1月前
|
运维 Java Android开发
认识Docker
认识Docker
|
9月前
|
关系型数据库 MySQL Docker
|
11月前
|
运维 Java 程序员
【docker】对docker的理解
【docker】对docker的理解
|
1月前
|
关系型数据库 MySQL 应用服务中间件
docker
docker
94 2
|
6月前
|
关系型数据库 MySQL 虚拟化
docker介绍
docker介绍
63 0
|
11月前
|
JavaScript 应用服务中间件 API
Docker
Docker 是一种开源的容器化平台,可以让开发者在容器中快速构建、打包、发布和运行应用程序,从而实现应用程序的快速交付和部署。
381 1