Docker学习

概述

  1. Docker基本组成

    客户端、服务端、仓库

  2. Docker安装

 [root@localhost ~]# uname -aLinux localhost.localdomain 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux[root@localhost ~]# cat /etc/os-releaseNAME="CentOS Linux"VERSION="7 (Core)"ID="centos"ID_LIKE="rhel fedora"VERSION_ID="7"PRETTY_NAME="CentOS Linux 7 (Core)"ANSI_COLOR="0;31"CPE_NAME="cpe:/o:centos:centos:7"HOME_URL="https://www.centos.org/"BUG_REPORT_URL="https://bugs.centos.org/"​CENTOS_MANTISBT_PROJECT="CentOS-7"CENTOS_MANTISBT_PROJECT_VERSION="7"REDHAT_SUPPORT_PRODUCT="centos"REDHAT_SUPPORT_PRODUCT_VERSION="7"​#1、卸载旧版本[root@localhost ~]# sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine;已加载插件:fastestmirror, langpacks参数 docker 没有匹配参数 docker-client 没有匹配参数 docker-client-latest 没有匹配参数 docker-common 没有匹配参数 docker-latest 没有匹配参数 docker-latest-logrotate 没有匹配参数 docker-logrotate 没有匹配参数 docker-engine 没有匹配不删除任何软件包​#2、设置需要的安装包安装yum-utils包(提供yum-config-manager 实用程序)并设置稳定存储库。[root@localhost ~]# sudo yum install -y yum-utils已加载插件:fastestmirror, langpacksLoading mirror speeds from cached hostfile* base: ftp.sjtu.edu.cn* extras: mirrors.aliyun.com* updates: mirrors.aliyun.com软件包 yum-utils-1.1.31-54.el7_8.noarch 已安装并且是最新版本无须任何处理​#3、设置镜像仓库 使用阿里云的yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo #默认国外的​[root@localhost ~]# yum-config-manager \--add-repo \http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo; #推荐使用阿里去#4、安装docker[root@localhost ~]# yum install docker-ce docker-ce-cli containerd.io​#5、启动docker[root@localhost ~]# systemctl start docker[root@localhost ~]# docker versionClient: Docker Engine - CommunityVersion:           20.10.9API version:       1.41Go version:        go1.16.8Git commit:        c2ea9bcBuilt:             Mon Oct  4 16:08:14 2021OS/Arch:           linux/amd64Context:           defaultExperimental:      true​Server: Docker Engine - CommunityEngine:Version:          20.10.9API version:      1.41 (minimum version 1.12)Go version:       go1.16.8Git commit:       79ea9d3Built:            Mon Oct  4 16:06:37 2021OS/Arch:          linux/amd64Experimental:     falsecontainerd:Version:          1.4.11GitCommit:        5b46e404f6b9f661a205e28d59c982d3634148f8runc:Version:          1.0.2GitCommit:        v1.0.2-0-g52b36a2docker-init:Version:          0.19.0GitCommit:        de40ad0​[root@localhost ~]# docker run hello-world​[root@localhost ~]# docker imagesREPOSITORY    TAG       IMAGE ID       CREATED       SIZEhello-world   latest    feb5d9fea6a5   3 weeks ago   13.3kB​#6、卸载 docker#删除安装包:yum remove docker-ce#删除镜像、容器、配置文件等内容:rm -rf /var/lib/docker​​

安装目录

 #默认目录/var/lib/docker​​

常用命令

  docker images #查看镜像docker rmi [image]  #删除镜像docker image rm [image]docker ps -a #查看全部容器docker version   #docker版本信息docker info      #docker详细信息docker --help    #帮助命令docker search 镜象名  # 搜索命令[root@localhost ~]# docker search tomcatNAME                          DESCRIPTION                                     STARS     OFFICIAL   AUTOMATEDtomcat                        Apache Tomcat is an open source implementati…   3152      [OK]       tomee                         Apache TomEE is an all-Apache Java EE certif…   93        [OK]       dordoka/tomcat                Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 base…   58                   [OK]kubeguide/tomcat-app          Tomcat image for Chapter 1                      31                   consol/tomcat-7.0             Tomcat 7.0.57, 8080, "admin/admin"              18                   [OK]​docker ps       #查看容器列表docker inspect  #查看具体容器详细信息docker run  -d  #后台运行-p  #端口映射-P  #随机映射-v  #目录持载-e  #环境配置-it #交互模式支行--name #容器名字docker start docker stopdocker killdocker restart docker rm -f #删除容器 docker run -it tomcat:7.0 /bin/bash#查看镜像版本docker image inspect (docker image名称):latest|grep -i version

容器使用

部署tomcat

 [root@localhost ~]# docker run -it --rm tomcat:7.0  #下载tomcat7.0并运行镜像 --rm 表示退出就自动清除容器Using CATALINA_BASE:   /usr/local/tomcatUsing CATALINA_HOME:   /usr/local/tomcatUsing CATALINA_TMPDIR: /usr/local/tomcat/tempUsing JRE_HOME:        /usr/local/openjdk-8Using CLASSPATH:       /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar​[root@localhost ~]# docker run -itd --name gzga-tomct  tomcat:7.0 /bin/bash #后台启动一个容器1f3c98ebc995f4e2a213afc4f2e1b52ac54b9d6b31e476380d880ccb0b638051​[root@localhost ~]# docker exec -it gzga-tomct /bin/bash  #命令交互的方式进入容器root@1f3c98ebc995:/usr/local/tomcat# ​[root@localhost ~]# docker ps -aCONTAINER ID   IMAGE        COMMAND       CREATED         STATUS                          PORTS     NAMES1f3c98ebc995   tomcat:7.0   "/bin/bash"   9 minutes ago   Exited (0) About a minute ago             gzga-tomct[root@localhost ~]# docker rm 1f3c98ebc9951f3c98ebc995​#正式部署Tomcat[root@localhost ~]# docker run -itd -p 7070:8080 --name gzga-tomcat tomcat:7.0 /bin/bash #启动一个暴露端口的容器ee599e7364dae5bc4be3738d34a2a2ea48722f6e6f6bdeff9fdb816fd65e0dde#此时外网访问不了,因为是最小镜像,阉割版本,执行以下命令[root@localhost ~]# docker exec -it gzga-tomcat /bin/bashroot@d0885c3b9e77:/usr/local/tomcat# cp -r webapps.dist/* webapps​#再访问tomcat 

配置启动脚本

 #!/bin/bash​CONTAINER_NAME="gzga_tomcat"​docker stop $CONTAINER_NAME && echo "$CONTAINER_NAME has been stopped!" || echo "failed to stop $CONTAINER_NAME"docker rm $CONTAINER_NAME && echo "$CONTAINER_NAME has been removed!" || echo "failed to remove $CONTAINER_NAME"​docker run -d --name $CONTAINER_NAME \-p 8088:8080 \-v $PWD:/usr/local/tomcat/webapps \-v $PWD/attachFile:/usr/local/attachFile \-v $PWD/conf/dm_svc.conf:/etc/dm_svc.conf \-v $PWD/conf/server.xml:/usr/local/tomcat/conf/server.xml \-v /etc/localtime:/etc/localtime \-e JAVA_OPTS='-Duser.timezone=GMT+08' \tomcat:7.0.109​​

部署nginx

 [root@localhost ~]# docker pull nginx:1.14.21.14.2: Pulling from library/nginx27833a3ba0a5: Pull complete 0f23e58bd0b7: Pull complete 8ca774778e85: Pull complete Digest: sha256:f7988fb6c02e0ce69257d9bd9cf37ae20a60f1df7563c3a2a6abe24160306b8dStatus: Downloaded newer image for nginx:1.14.2docker.io/library/nginx:1.14.2​[root@localhost ~]# docker run --name gzga-nginx -d -p 8080:80 nginx:1.14.2677dd68f55406dcb98e346171c037042614515777bf00052bff67f26902dbd6d​[root@localhost ~]# docker exec -it gzga-nginx /bin/bash  #进入容器root@677dd68f5540:/# ​

配置 nginx.conf

 #1、创建挂载目录[root@localhost local]# mkdir -p /home/service/nginx/log[root@localhost local]# mkdir -p /home/service/nginx/conf[root@localhost local]# mkdir -p /home/service/nginx/conf.d[root@localhost local]# mkdir -p /home/service/nginx/static[root@localhost local]# mkdir -p /home/service/nginx/ssl​#2、复制配置文件[root@localhost nginx]# docker cp gzga-nginx:/etc/nginx/nginx.conf /home/service/nginx/conf/nginx.conf ​root@localhost nginx]# docker cp gzga-nginx:/etc/nginx/conf.d/default.conf /home/service/nginx/conf.d/default.conf​[root@localhost nginx]# docker cp gzga-nginx:/usr/share/nginx/html/index.html /home/service/nginx/static/index.html​

修改nginx

 #修改后结果user  nginx;worker_processes  1;error_log  /var/log/nginx/error.log warn;pid        /var/run/nginx.pid;worker_rlimit_nofile 65535;​events {use epoll;worker_connections 65535;}​​http {include /etc/nginx/mime.types;default_type application/octet-stream;charset utf-8;keepalive_timeout 60;log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  /var/log/nginx/access.log  main;server {listen 80;server_name  www.roes.top;location / {root   /usr/share/nginx/html;index  index.html index.htm;}}include /etc/nginx/conf.d/*.conf;}​

停止容器并删除容器

 [root@localhost nginx]# docker stop gzga-nginxgzga-nginx[root@localhost nginx]# docker rm gzga-nginx gzga-nginx​

重新启动容器

 [root@localhost nginx]# docker run --name gzga-nginx -d -p 8080:80 -v /home/service/nginx/static:/usr/share/nginx/html -v /home/service/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/service/nginx/log:/var/log/nginx -v /home/service/nginx/conf.d:/etc/nginx/conf.d -v /home/service/nginx/ssl:/ssl  nginx:1.14.2​

配置 favicon.ico

 #location = /favicon.ico {root  /usr/share/nginx/html;}​​docker exec -i gzga-nginx nginx -s reload​

配置启动脚本

 #!/bin/bash​echo "停止容器"docker stop gzga-nginx​echo "移除容器"docker rm gzga-nginx​echo "部署并启动容器"docker run --name gzga-nginx -d -p 8080:80 -p 9000:9000 -v /home/service/nginx/static:/usr/share/nginx/html -v /home/service/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/service/nginx/log:/var/log/nginx -v /home/service/nginx/conf.d:/etc/nginx/conf.d -v /home/service/nginx/ssl:/ssl  nginx:1.14.2​

反向代理配置

复制default.conf文件生成一个新文件

 [root@localhost nginx]#cd conf.d[root@localhost nginx]#cp default.conf app.conf​

修改app.conf文件,内容如下

 ​upstream gzgaapi {server 192.168.1.16:8088 weight=1;}​server {listen      9000;server_name  localhost;​#charset koi8-r;#access_log  /var/log/nginx/host.access.log  main;​location / {proxy_pass   http://gzgaapi;index  index.html index.htm;}​#error_page  404              /404.html;​# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}​# proxy the PHP scripts to Apache listening on 127.0.0.1:80##location ~ \.php$ {#    proxy_pass   http://127.0.0.1;#}​# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000##location ~ \.php$ {#    root           html;#    fastcgi_pass   127.0.0.1:9000;#    fastcgi_index  index.php;#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;#    include        fastcgi_params;#}​# deny access to .htaccess files, if Apache's document root# concurs with nginx's one##location ~ /\.ht {#    deny  all;#}}​

部署Redis

查看redis镜像

 [root@localhost home]# docker search redisNAME                                               DESCRIPTION                                     STARS     OFFICIAL   AUTOMATEDredis                                              Redis is an open source key-value store that…   11137     [OK]       bitnami/redis                                      Bitnami Redis Docker Image                      227                  [OK]bitnami/redis-sentinel                             Bitnami Docker Image for Redis Sentinel         39                   [OK]bitnami/redis-cluster                                                                              34                     

拉取镜像

 #取stars最高的那一个 版本 7.0.3[root@localhost home]# docker pull redisUsing default tag: latestlatest: Pulling from library/redis461246efe0a7: Pull complete edee06fdf403: Pull complete 04b7adc9ef61: Pull complete 675e080de32e: Pull complete 52f80fad4364: Pull complete fb132777afe2: Pull complete Digest: sha256:fe5e55a258e98788989fe77a116155088b8a27d8665ba9747df23af53c3b9a82Status: Downloaded newer image for redis:latestdocker.io/library/redis:latest#查看版本[root@localhost home]# docker image inspect redis:latest|grep -i version"GOSU_VERSION=1.14","REDIS_VERSION=7.0.3","DockerVersion": "20.10.12","GOSU_VERSION=1.14","REDIS_VERSION=7.0.3",​

创建容器

 [root@localhost home]# docker run -d --name redis -p 6379:6379 redis --requirepass "redis"​

进入客户端

 [root@localhost home]# docker exec -it redis redis-cli127.0.0.1:6379> ​

密码相关

 #查询密码config get requirepass #设置密码 默认密码redisconfig set requirepass XXX #认证密码auth XXX​

注意事项

第一次创建容器设置密码后,登陆后无法直接查询密码,需要 auth 验证密码

 [root@localhost home]# docker exec -it redis redis-cli127.0.0.1:6379> config get requirepass(error) NOAUTH Authentication required.127.0.0.1:6379> auth redisOK​​

容器数据卷

具名与匿名挂载

 docker volume ls #查看所有卷​#具名挂载,指定外部文件目录​#匿名挂载,不指定外部文件目录​​​​

DockerFile

DockerFile常用操作

用来构建Docker镜像文件

 #创建dockerfile 文件vi dockerFileName#执行命令docker build -f dockerFileName -t hesai/centos .​​​
 docker history #查看历史过程​

Docker发布

阿里云镜像及DockerHub

 docker push

备份成压缩包

 docker save​docker load​

Docke网络

Docker0

 #查看网卡ip addr​#docker 使用evth-pair技术进行通信​#--link 连通dockerdocker run -d --link   ​docker network  #查询当前网络​docker exec -it 容器 cat /etc/hosts​​

官方docker0问题

不支持容器名连接访问

自定义网络

查看Docker网络

 docker newwork ls​​​​

网络模式

bridge: 桥接

none:不配置网络

host:配置主机共享网络

container:容器网络连接

 docker run -d -P --name 容器名 --net bridge 镜像名​docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet​docker run -d --name 容器名 --net mynet

自定义网络优势

  • 修复了docker的缺点

  • 容器之间可以随意互联

  • 不同的集群使用不同的网络,保证网络的安全

网络连通

 docker network connect mynet tomcat01  #连接其他网络的网卡​​

集群配置

常用操作

文件复制

 #复制容器内attachFile整个目录到 /home/icm/docker/gxhgy/attachFile 目录下[icm@icm-old gxhgy]$ docker cp f0a6adeaa7d3:/usr/local/tomcat/d:/attachFile/ /home/icm/docker/gxhgy/attachFile/[icm@icm-old attachFile]$ pwd/home/icm/docker/gxhgy/attachFile[icm@icm-old attachFile]$ lsattachFile​#复制容器内attachFile目录下所有文件到 /home/icm/docker/gxhgy/attachFile 目录下[icm@icm-old attachFile]$ docker cp  f0a6adeaa7d3:/usr/local/tomcat/d:/attachFile/.  /home/icm/docker/gxhgy/attachFile/[icm@icm-old attachFile]$ ls617e8d74-7dbf-4cda-ad67-c306cab255e5[icm@icm-old attachFile]$ pwd/home/icm/docker/gxhgy/attachFile​#制容器内attachFile整个目录到当前文件[icm@icm-old gxhgy]$ docker cp  f0a6adeaa7d3:/usr/local/tomcat/d:/attachFile/ .​​

查看镜像版本

 [root@localhost home]# docker image inspect redis:latest|grep -i version"GOSU_VERSION=1.14","REDIS_VERSION=7.0.3","DockerVersion": "20.10.12","GOSU_VERSION=1.14","REDIS_VERSION=7.0.3",

常见问题

容器时间错误

 #1、启动时进行映射[icm@icm-old ~] docker run --name gzga_tomcat -d -p 8080:8088 -v /etc/localtime:/etc/localtime ​#2、如果容器已创建,复制时区信息到容器# 如果本机时区正确[icm@icm-old ~] docker cp /etc/localtime gzga_tomcat:/etc/localtime# 如果本机时区不正确[icm@icm-old ~] docker cp /usr/share/zoneinfo/Asia/Shanghai gzga_tomcat:/etc/localtime​​

java时间不对

原因:java时间读取的是 /etc/timezone 文件,检查该文件时区是否正确

修改 docker 时区

 # 修改 dcokcer时间区[icm@icm-old ~] docker exec -it gzga_tomcat /bin/bash[icm@icm-old ~] echo "Asia/Shanghai" > /etc/timezone​# 重启容器[icm@icm-old ~] docker stop gzga_tomcat[icm@icm-old ~] docker start gzga_tomcat​

映射 /etc/timezone 文件到容器

 [icm@icm-old ~] docker run --name gzga_tomcat -d -p 8080:8088 -v /etc/timezone:/etc/timezone 

传递参数到jvm

 [icm@icm-old ~] docker run --name gzga_tomcat -d -p 8080:8088 -e JAVA_OPTS='-Duser.timezone=GMT+08' ​

Docker日常随笔相关推荐

  1. 最新 docker 日常总结-实用宝典-先收藏

    docker 日常总结-实用宝典 问题 1. IPv4 forwarding disabled 2. Docker daemon socket权限不足 原因 解决方案 3. docker启动容器后就闪 ...

  2. 【Docker】docker日常工作总结(涉及基础命令、基础名词概念、镜像、容器、网络、数据卷)

    今日状态:保持学习 打卡学习 星期一 星期二 星期三 星期四 星期五 星期六 星期日 成功 成功 成功 成功 成功 前提:必须有一个docker环境,可以安装到windows.linux.Ubuntu ...

  3. docker日常操作

    查看镜像 [root@yangdong gitprojects]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE influxdb latest ...

  4. Docker 学习随笔

    Docker的安装和卸载–Debian 卸载旧版本 root@linux-PC:~# sudo apt-get remove docker docker-engine docker.io contai ...

  5. 日常随笔: React useEffect中使用异步更新数据方法遇到的问题

    开发随笔:react hooks 异步更新的问题 1. 问题叙述 在使用antd/G2图表更新的时候发现:在useEffect中通过异步函数对图表渲染的data进行更新, 但是由于第一次更新后,数据是 ...

  6. 日常随笔——m1 macbook安装和配置qt

    先用brew安装qt.参考Apple M1 开发 Qt 6.2 踩坑 但是并没有解决实际问题,在安装完之后,会报错显示编译器与qt版本不匹配,此时需要安装Xcode,直接在Apple Store中进行 ...

  7. 日常随笔——如何判断字符是汉字、字母、还是拼音? 在C++中又该如何判断?

    最近遇到一个问题,需要判断一个字符串中是否包含汉字.拼音.普通字符,于是就简单记录下来. 首先,如何判断这些,绕不开操作系统中的编码,常见的有三种:ASCII.Unicode.UTF-8 ASCII ...

  8. python 乱码 无效_python写入csv中文乱码问题,encoding=’utf-8’无效还是乱码——吕江民·日常随笔...

    今天在处理python写入csv中文乱码问题,尝试各种办法,百思不得其解,网上找到的最常用的办法就是 1. encoding='utf-8':无效 with open('data4.csv', 'a' ...

  9. python csv写入中文_python写入csv中文乱码问题,encoding='utf-8'无效还是乱码——吕江民·日常随笔...

    今天在处理python写入csv中文乱码问题,尝试各种办法,百思不得其解,网上找到的最常用的办法就是 1. encoding='utf-8':无效 with open('data4.csv', 'a' ...

最新文章

  1. Oracle CRS的管理与维护
  2. Python下载、安装及其配置
  3. js 计时器无法清除是为什么
  4. 【c++ Primer 】 4.10复习题 12题(int)、(int)和(int*)
  5. html 图片 按钮,css按钮背景图片如何实现?(代码实例)
  6. css网页设计qq彩贝
  7. TFS2010升级至TFS2013完全指南(更换服务器)
  8. js实现表格隔行变色效果
  9. vim 剪贴板历史插件
  10. 【独行秀才】macOS Big Sur 11.6.5正式版(20G517)原版镜像
  11. jeecg ajax验证,jeecg权限模块学习
  12. 高并发系统中库存热点的解决方案
  13. 分数四则运算 python
  14. Apple 基于蓝牙的iBeacon技术
  15. BF算法及KMP算法的实现
  16. 使用Excel创建线性回归模型
  17. 1.MATLAB图像处理基础知识
  18. 人工智能的“斯芬克斯之谜”
  19. [CTF] 每日一题汇总
  20. 基于预训练语言模型的检索- 匹配式知识图谱问答系统

热门文章

  1. 润乾报表 表头斜线 怎么设置
  2. 食品加工MES系统如何实现数据采集和设备管理
  3. 【STM32学习笔记】(12)——NVIC(嵌套向量中断控制器)详解
  4. ANTs安装问题记录
  5. 编码芯片EV1527射频学习
  6. 树莓派 —— 安装RaspberryPi系统(为了编译ffmpeg硬件加速)
  7. 2022年电赛F题 信号调制度测量装置
  8. html5上传图片限制大小
  9. Knowledgeable Prompt-tuning: Incorporating Knowledge into Prompt Verbalizer for Text Classification
  10. 【数据结构】图的深度遍历与广度遍历