Docker学习总结

    技术2022-07-10  180

    Docker概述

    学习狂神说Java总结

    Docker出现原因

    环境配置麻烦,每个机器都要部署环境(集群Redis、ES、Hadoop…)!费时费力

    传统:开发jar,运维来做!

    现在:开发打包部署上线,一套流程做完!

    java — jar(环境) —打包项目带上环境

    Docker常用命令

    # docker启动命令 # 当linux重启后需要重启docker service docker start docker version #显示docker版本 docker info #显示docker的系统信息,包括镜像和容器的数量 docker 命令 --help #帮助命令

    镜像命令

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

    REPOSITORY # 镜像的仓库源 TAG # 镜像的标签 IMAGE ID # 镜像的id CREATED # 镜像的创建时间 SIZE # 镜像的大小 # 可选项 -a, --all #列出所有镜像 -q, --quiet #只显示镜像的id

    Docker 搜索

    [root@chico docker]# docker search "docker search" requires exactly 1 argument. See 'docker search --help'. Usage: docker search [OPTIONS] TERM Search the Docker Hub for images [root@chico docker]# docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-source relation… 9 #可选项,通过收藏过滤 --filter=stars=3000

    下载镜像

    # docker [root@chico docker]# docker pull mysql Using default tag: latest latest: Pulling from library/mysql 8559a31e96f4: Already exists d51ce1c2e575: Already exists c2344adc4858: Already exists fcf3ceff18fc: Already exists 16da0c38dc5b: Already exists b905d1797e97: Already exists 4b50d1c6b05c: Already exists c75914a65ca2: Pull complete 1ae8042bdd09: Pull complete 453ac13c00a3: Pull complete 9e680cd72f08: Pull complete a6b5dc864b6c: Pull complete Digest: sha256:8b7b328a7ff6de46ef96bcf83af048cb00a1c86282bfca0cb119c84568b4caf6 Status: Downloaded newer image for mysql:latest docker.io/library/mysql:latest

    docker rmi删除镜像

    # docker rmi -f 镜像id #删除指定的镜像 # docker rmi -f 镜像id 镜像id 镜像id #删除多个镜像 # docker rmi -f $(docker image -qa) #删除全部镜像

    开启docker自动启动容器

    docker update --restart=always 容器名称或者容器id

    容器命令

    说明:我们有了镜像才可以创建容器,linux,下载一个centos镜像

    docker pull centos

    新建容器并启动

    docker run [可选参数] images #参数说明 --name="name" 容器名称 用来区分容器 -d 后台方式运行 -it 使用交互方式运行,进入容器查看内容 -p 指定容器的端口 -p -p ip:主机端口:容器端口 -p 主机端口:容器端口(常用) -p 容器端口 容器端口 -P 随机指定端口 #测试。启动并进入容器 [root@chico docker]# docker run -it centos /bin/bash [root@850130482a6a /]# # 退出命令 exit()

    列出所有运行的容器

    # docker ps命令 # 列出当前正在运行的容器 -a # 列出当前正在运行的容器+带出历史运行过的容器 -n=? # 显示最近创建的容器 -q # [root@chico docker]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ad57aa8e515e morunchang/fastdfs "sh storage.sh" 10 hours ago Up 3 hours storage 7317461753e2 mysql:5.7 "docker-entrypoint.s…" 11 hours ago Up 3 hours 0.0.0.0:3306->3306/tcp, 33060/tcp mysql5.7 [root@chico docker]# docker ps -aq 850130482a6a 08af5301ec84 ad57aa8e515e f3cf4b505e46 1490c2b7c63f 7317461753e2 5acd2ae891ba

    退出容器

    exit # 直接容器停止并推出 Ctrl+P+q # 不停止退出

    删除容器

    docker rm #删除指定容器,不能删除正在运行的容器,如果要强制删除需要rm -f docker rm -f $(docker ps -aq) #删除所有的容器 docker ps -a -q|xargs docker rm #s删除所有容器

    启动和停止容器的操作

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

    常用其他命令

    常用其他命令

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

    查看日志

    docker log -f -t --tail 容器 #显示日志 -tf #显示日志 --tail number #要显示日志条数

    查看容器中进程信息

    # 命令 docker top 容器id

    查看镜像元数据

    # 命令 docker inpsect 容器id docker inspect

    进入当前正在运行的容器

    # 方式1: # 命令 docker exec -it 容器id /bin/bash # 方式2: # 命令 docker attach 容器id # docker exec # 进入容器后开启一个新的终端,可以在里面操作(常用) # docker attach #进入正在执行的终端,不会启动新的进程

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

    #宿主机: # docker cp 容器id:容器内路径 目的的主机路径 # 拷贝是一个手动过程,可以用-v卷,可以同步

    总结

    作业练习

    练习1

    Docker 安装Nginx

    # 1、搜索镜像 search # 2、下载镜像 pull # 3、运行测试 -d 后台运行 --name 给容器起名 -p 暴露端口 # docker run -d --name nginx01 -p 3344:80 [root@chico ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7e70de456b73 nginx "/docker-entrypoint.…" 9 minutes ago Up 9 minutes 0.0.0.0:3344->80/tcp nginx01 6602ac74fe62 centos "/bin/bash" About an hour ago Up About an hour peaceful_cannon ad57aa8e515e morunchang/fastdfs "sh storage.sh" 12 hours ago Up 4 hours storage 7317461753e2 mysql:5.7 "docker-entrypoint.s…" 13 hours ago Up 4 hours 0.0.0.0:3306->3306/tcp, 33060/tcp mysql5.7 [root@chico ~]# curl localhost:3344 # 进入容器 [root@chico ~]# docker exec -it nginx01 /bin/bash root@7e70de456b73:/# whereis nginx nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx root@7e70de456b73:/# cd /etc/nginx root@7e70de456b73:/etc/nginx# ls conf.d koi-utf mime.types nginx.conf uwsgi_params fastcgi_params koi-win modules scgi_params win-utf root@7e70de456b73:/etc/nginx# ![image-20200610234306256](https://img-blog.csdnimg.cn/20200630231035742.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk2ODg5NQ==,size_16,color_FFFFFF,t_70) 如何在容器外部提供一个映射路径,达到在容器修改文件名,容器内部就能自动修改? -v 数据卷 ## 练习2 > docker装一个tomcat ```bash #官方使用 docker run -it --rm tomcat:9.0 # docker run -it --rm,用来测试,用完即删 # 下载再启动 docker pull tomcat # 启动运行 docker run -d -p 3355:8080 --name tomcat01 tomcat:9.0 #测试访问有问题 [root@chico ~]# docker run -d -p 3355:8080 --name tomcat01 tomcat:9.0 319d489d7c22c9041bbb7d467990e3d681f709cf7d0050a8c4f2eb859468f6b1 [root@chico ~]# docker exec -it tomcat01 /bin/bash # 进入容器 #docker exec -it tomcat01 /bin/bash # 1.命令少了2.没有webapps # 原因:保证最小可运行的环境 [root@chico ~]# docker exec -it 319d489d7c22 /bin/bash root@319d489d7c22:/usr/local/tomcat# ls BUILDING.txt LICENSE README.md RUNNING.txt conf logs temp webapps.dist CONTRIBUTING.md NOTICE RELEASE-NOTES bin lib native-jni-lib webapps work root@319d489d7c22:/usr/local/tomcat# cp -r webapps.dist/* webapps root@319d489d7c22:/usr/local/tomcat#

    练习3

    部署ES+Kibana

    # es 暴露的端口很多 # es 十分的耗内存 # es 的数据一般要放置在安全目录!挂载 # --net somenetword ? 网络配置 # 启动 elasticsearch $ docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2 # 启动会很卡 docker stats 查看cpu的状态 # es 是十分耗内存的 1.xG # 限制它的内存 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 # 访问目的地址 curl localhost:9200

    使用kibana连接ES

    Processed: 0.013, SQL: 9