Docker日常随笔
Docker学习
概述
Docker基本组成
客户端、服务端、仓库
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: trueServer: 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/bashCONTAINER_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/bashecho "停止容器"docker stop gzga-nginxecho "移除容器"docker rm gzga-nginxecho "部署并启动容器"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 savedocker 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 mynetdocker 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日常随笔相关推荐
- 最新 docker 日常总结-实用宝典-先收藏
docker 日常总结-实用宝典 问题 1. IPv4 forwarding disabled 2. Docker daemon socket权限不足 原因 解决方案 3. docker启动容器后就闪 ...
- 【Docker】docker日常工作总结(涉及基础命令、基础名词概念、镜像、容器、网络、数据卷)
今日状态:保持学习 打卡学习 星期一 星期二 星期三 星期四 星期五 星期六 星期日 成功 成功 成功 成功 成功 前提:必须有一个docker环境,可以安装到windows.linux.Ubuntu ...
- docker日常操作
查看镜像 [root@yangdong gitprojects]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE influxdb latest ...
- Docker 学习随笔
Docker的安装和卸载–Debian 卸载旧版本 root@linux-PC:~# sudo apt-get remove docker docker-engine docker.io contai ...
- 日常随笔: React useEffect中使用异步更新数据方法遇到的问题
开发随笔:react hooks 异步更新的问题 1. 问题叙述 在使用antd/G2图表更新的时候发现:在useEffect中通过异步函数对图表渲染的data进行更新, 但是由于第一次更新后,数据是 ...
- 日常随笔——m1 macbook安装和配置qt
先用brew安装qt.参考Apple M1 开发 Qt 6.2 踩坑 但是并没有解决实际问题,在安装完之后,会报错显示编译器与qt版本不匹配,此时需要安装Xcode,直接在Apple Store中进行 ...
- 日常随笔——如何判断字符是汉字、字母、还是拼音? 在C++中又该如何判断?
最近遇到一个问题,需要判断一个字符串中是否包含汉字.拼音.普通字符,于是就简单记录下来. 首先,如何判断这些,绕不开操作系统中的编码,常见的有三种:ASCII.Unicode.UTF-8 ASCII ...
- python 乱码 无效_python写入csv中文乱码问题,encoding=’utf-8’无效还是乱码——吕江民·日常随笔...
今天在处理python写入csv中文乱码问题,尝试各种办法,百思不得其解,网上找到的最常用的办法就是 1. encoding='utf-8':无效 with open('data4.csv', 'a' ...
- python csv写入中文_python写入csv中文乱码问题,encoding='utf-8'无效还是乱码——吕江民·日常随笔...
今天在处理python写入csv中文乱码问题,尝试各种办法,百思不得其解,网上找到的最常用的办法就是 1. encoding='utf-8':无效 with open('data4.csv', 'a' ...
最新文章
- Oracle CRS的管理与维护
- Python下载、安装及其配置
- js 计时器无法清除是为什么
- 【c++ Primer 】 4.10复习题 12题(int)、(int)和(int*)
- html 图片 按钮,css按钮背景图片如何实现?(代码实例)
- css网页设计qq彩贝
- TFS2010升级至TFS2013完全指南(更换服务器)
- js实现表格隔行变色效果
- vim 剪贴板历史插件
- 【独行秀才】macOS Big Sur 11.6.5正式版(20G517)原版镜像
- jeecg ajax验证,jeecg权限模块学习
- 高并发系统中库存热点的解决方案
- 分数四则运算 python
- Apple 基于蓝牙的iBeacon技术
- BF算法及KMP算法的实现
- 使用Excel创建线性回归模型
- 1.MATLAB图像处理基础知识
- 人工智能的“斯芬克斯之谜”
- [CTF] 每日一题汇总
- 基于预训练语言模型的检索- 匹配式知识图谱问答系统