docker
2021-03-23 18:41:48 3 举报
AI智能生成
docker入门
作者其他创作
大纲/内容
docker 基础篇之快速上手
docker 简介
是什么
问题 : 为什么会有 docker 的出现?
docker 镜像的设计font color=\"#c41230\
docker 理念
docker 是基于 go语言实现的云开源项目
一句话
解决了运行环境和配置问题font color=\"#c41230\
能干嘛
之前的虚拟机技术
虚拟机的缺点
资源占用多
冗余步骤多
启动慢
容器虚拟化技术
font color=\"#c41230\
Docker 与传统虚拟机的区别
开发/运维(DevOps)
更快速的应用交付和部署
更便捷的升级和扩缩容
更简单的系统运维
更高效的计算资源利用
企业级
新浪
美团
...
在哪下
官网
https://www.docker.com/
仓库
https://hub.docker.com/
docker安装
前提说明
docker 要求linux 系统版本内核为 2.6.32-431 或者更高版本
查看自己Linux 版本
uname -r
3.10.0-1127.19.1.el7.x86_64
cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
docker 架构图
docker 的基本组成
镜像(image)
docker 镜像(image) 就是一个font color=\"#c41230\
容器(Container)
仓库( Repositry)
仓库是font color=\"#c41230\
仓库又分为公开仓库和私有仓库
最大的公开仓库是 docker hub
小总结
安装步骤
https://docs.docker.com/engine/install/centos/
开机启动docker
systemctl enable docker
镜像配置
阿里云镜像加速配置
获取加速器地址链接
配置参考阿里云文档
如何查看是否修改成功
docker info 查看 Registry Mirrors:
docker search mysql 出现错误 Error response from daemon: Get https://index.docker.io/v1/search?q=java&n=25: dial tcp:
永远的hello word
docker run hello-world
底层原理
docker 是怎么工作的
为什么docker比VM快
docker常用命令
帮助命令
docker version
docker info
docker help
镜像命令
docker images
列出本地主机上的镜像
REPOSITORY
TAG
IMAGE ID
CREATED
SIZE
镜像的仓库源
镜像的标签
镜像ID
镜像创建时间
镜像大小
options 说明
-a 列出本地所有的镜像(含中间映射层)
-q 只显示镜像ID
-- digests 显示镜像的摘要信息
--no-trunc 显示完整的镜像信息
docker search 某个xx镜像名字
网站
命令
docker search [OPTIONS] 镜像名字
OPTIIONS 说明
--no-trunc 显示完整的镜像描述
--filter=stars=? 列出收藏数不小于指定值的镜像
automated 只列出 automated build 类型的镜像
docker pull 下载某个xx镜像名字
docker rmi 删除某个xx镜像名字id
删除单个镜像
docker rmi -f 镜像ID
删除多个镜像
docker rmi -f [镜像名] [镜像名]
删除全部镜像
docker rmi -f $(docker images -q)
有了pull / 是不是有 commit ? push ?
容器命令
docker pull centos
新建并启动容器
docker run [OPTIONS] image [COMMAND] [ARG...]
OPTIONS
--name=''容器新名字\"
-P 随机端口映射
-p 指定端口映射
列出当前所有正在运行的容器
docker ps [OPTIONS]
OPTIONS
-a 列出当前所有正在运行的容器+历史上运行过的
-l 显示最近创建的容器
-n 显示最近n个创建的容器
--no-trunc 不截断输出
退出容器
exit 容器停止退出
ctrl +p +Q 容器不停止退出
启动容器
docker start [容器ID / 容器名]
重启容器
docker restart [容器ID / 容器名]
停止容器
docker stop [容器ID / 容器名]
强制停止容器
docker kill [容器ID / 容器名]
删除已停止容器
docker rm 容器ID
一次性删除多个容器
docker rm -f $(docker ps -q -n 4)
docker ps -a -q |xargs docker rm
重要
启动守护式容器
docker run -d [容器名]
很重要的说明的这一点: font color=\"#c41230\
容器运行的命令如果不是那些font color=\"#c41230\
查看容器日志
docker logs -f -t -tail 容器ID
-t 是加入时间戳
-f 跟随最新的日志打印
查看容器内运行的进程
docker top [容器ID]
查看容器内部细节
docker inspect [容器ID]
进入正在运行的容器并以命令行交互
docker attach [容器ID]
docker exec -t cf739b88e052 ls -l /tmp
docker exec -it dc182a4de9d1 /bin/bash
从容器内拷贝文件到主机上
docker cp [容器ID]:[容器内需要copy的文件路径] [新的路径]
如果命令不够则参考官网api
docker 镜像
UnionFS (联合文件系统)
特性:
Docker 镜像加载原理
font color=\"#0076b3\
分层的镜像
例如 docker pull tomcat
756975cb9c7e: Already exists d77915b4e630: Already exists 5f37a0a41b6b: Already exists 96b2c1e36db5: Already exists 27a2d52b526e: Already exists a867dba77389: Already exists 0939c055fb79: Already exists 0b0694ce0ae2: Already exists ecfd61680f76: Pull complete 4cc8f7c49073: Pull complete
为什么Docker 镜像要采用这种分层结构呢?
最大的好处就是-font color=\"#c41230\
特点
docker 镜像commit 操作补充
docker commit 提交容器副本使之成为一个新的镜像
docker commit -m=\"提交的描述信息\" -a=\"作者\" 容器ID要创建的目标镜像名:[标签名]
栗子
docker run -it -p 8888:8080 [容器ID]
访问 域名:8888 如果访问失败404
docker exec -it [容器id] /bin/bash
ls -l 查看文件路径
进入tomcat容器
docker exec [容器id] /bin/bash
cd /webapps
rm -r docs
docker commit -a=\"zgx\" -m=\"tomcat no docs\" e42845b8701d zgx/tomcat:1.2
启动 zgx/tomcat1.2 没有 docs
启动原来的 tomcat 有docs
docker 容器数据卷
容器之间 希望有可能共享数据
容器的持久化
容器间继承+共享数据
数据卷
容器内添加
直接命令添加
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
查看数据卷是否挂载成功
容器和宿主机之间数据共享
命令(带权限)
docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
dockerFile 添加
根目录新建mydocker 文件夹并进入
可在dockerfile中使用 VOLUME 指令来给镜像添加一个或多个数据卷
VALUME[\"/dataVolumeContainer\
file 构建
build 后生成镜像
或得一个新镜像 zzyy/centos
docker build -f /root/mydocker/dockerfile -t zzyy/centos .
run 容器
docker run -it zzyy/centos /bin/bash
使用 docker inspect [容器id] 查看 Mounts 已经给出了位置
主机对应默认地址
备注
docker 挂载主机目录docker 访问出现 catnot open directory.:Permission denied
在挂载目录后多加一个--privileged=true参数
数据卷容器
总体介绍
它们已经具有容器卷
/dataVolumeContainer
/dataVolumeContainer1
容器间传递共享(-- volumes from)
在dataContainer2 新增一个内容
dc02 / dc03 继承自dc01
--volumes-from
命令docker run -it --name dco3 --volumes-from dc01 zzyy/centos
dc02 / dc03 分别在 dataContainer2中各自添加内容
回到 dc01 可以看到 dc02 /dc03 各自添加的都能共享了
新建dc04 继承自dc03 再删除dc03
结论: font color=\"#c41230\
dockerFile 解析
构建三步骤
编写dockerFile 文件
docekr build
docker run
文件什么样
以centos为例
dockerFile 构建过程解析
dockerfile 内容基础知识
docker 执行dockerfile 的大致执行流程
从应用软件的角度看
dockerfile 是软件的原材料
docker 镜像是软件的交付品
docker 容器则是可以认为是软件的运行态
dockerfile 体系结构(保留字指令)
FROM
ADD
将宿主机目录下的文件拷贝进镜像且 ADD 命令会自动处理 URL 和解压tar 压缩包
COPY
COPY src dest
COPY [src dest]
LABEL
标签
CMD
指定一个容器启动时要运行的命令
ENTRYPOINT
MAINTAINER
镜像维护者的姓名和邮箱地址
RUN
容器构建时需要运行的命令
EXPOSE
当前容器对外暴露出的端口
WORKDIR
ENV
用来构建镜像过程中设置环境变量
VOLUME
ONBUILD
案例
Base 镜像(scratch)
docker hub中99% 的镜像都是通过在base 镜像中安装和配置需要的软件构建出来
自定义镜像 mycentos
Hub 默认的centos 镜像是什么情况
vim 无法编辑文本
ifconfig 没有这个命令
初始centos 运行镜像的默认路径是 /
我们自定义centos 镜像具有以下特性
登录后的默认路径
vim 编辑器
查看网络配置 ifconfig
自定义镜像
vim dockerfile
docker build -f dockerfile -t mycentos:1.3 .
docker run -it --name mycentos1.3 [容器名字]:标签
docker history [Images ID]
如果build出现错误 Error: Failed to download metadata for repo 'AppStream'
请关闭防火墙
CMD/ENTRYPOINT 镜像案例
都是指定一个容器启动时要运行的命令
CMD
案例: tomcat演示
docker run -it -p 8888:8080 tomcat:latest ls -l
curl制作CMD版可以查询IP信息的容器
vim dockerfile3
docker build -f dockerfile3 -t myip:1.0 .
docker run -it myip:1.0
结果
curl 命令解释
curl是将下载文件输出到 stdout
问题
docker run myip:1.0 -i
docker: Error response from daemon: OCI runtime create failed: container_linux.go:370: starting container process caused: exec: \"-i\": executable file not found in $PATH: unknown.ERRO[0000] error waiting for container: context canceled
why?
制作 ENTRYPONINT 版查询iP的信息容器
vim dockerfile4
docker build -f dockerfile4 -t myip:1.1 .
docker run myip:1.1 -i 有可以 docker run myip:1.1
ONBUILD 案例演示
vim dockerfile5
# Executing 1 build trigger ---> Running in 388affb3fefbsuccess father ------ok
自定义镜像 tomcat9
apache-tomcat-8.5.59.tar.gz
jdk-8u261-linux-x64.tar.gz
docker build -f dockerfile -t mytomcat .
docker run -d -p 8888:8080 --name mytomcat9 -v /root/mydocker/tomcat9/test:/usr/local/apache-tomcat-8.5.59/webapps/test -v /root/mydocker/tomcat9/logs:/usr/local/apache-tomcat-8.5.59/logs myt9
ip:端口 是否可以访问tomcat首页
创建一个WEB-INF/web.xml
/test/index.html
重启 docker restart [容器ID] 然后访问 ip:端口/test
docker 常用安装
安装mysql
docker search mysql
docker pull mysql
/root/mydocker/config/my.cnf
docker run -p 3306:3306 --name mysql -v /root/mydocker/mysql/data:/var/lib/mysql -v /root/mydocker/mysql/conf:/etc/mysql/ -v /root/mydocker/mysql/log:/var/log/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
数据库备份
docker exec 59aef2f0c147 sh -c 'exec mysqldump -all -database -uroot -p\"123456\"'> /root/all-database.sql
docker update 容器id--restart=always
安装redis
docker run -d --name redis -p 6379:6379 -v /root/mydocker/redis/data:/data -v /root/mydocker/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf redis redis-server /usr/local/etc/redis/redis.conf --appendonly yes
在 /root/mydocker/redis/conf/redis.conf/ 目录下新建 redis.conf 文件
docker exec -it 34efecec40b5 redis-cli
查看持久化文件
data/目录下
进入 redis客户端进行测试
docker exec -it youthful_sammet redis-cli
设置docker 启动启动服务
docker update redis --restart=always
安装elasticsearch
下载镜像文件
docker pull elasticsearch:7.10.1
docker pull kibana:7.10.1
创建目录
mkdir -p elasticsearch/config
mkdir -p elasticsearch/data
mkdir -p elasticsearch/plugins
开放外网访问
echo “http.host: 0.0.0.0” >> /root/mydocker/elasticsearch/config/elasticsearch.yml
启动
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 -e \"discovery.type=single-node\" -e \"ES_JAVA_OPTS=-Xms64m -Xmx512m\" -v /root/mydocker/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearche.yml -v /root/mydocker/elasticsearch/data:/usr/share/elasticsearch/data -v /root/mydocker/elasticsearch/plugins:/usr/share/elasticsearch/plugins -d elasticsearch:7.10.1
浏览器访问
http://192.168.247.111:9200/
如果出现错误可以使用
docker logs elasticsearch
错误信息 root cause: java.nio.file.AccessDeniedException: /usr/share/elasticsearch/data/nodes
设置elasticsearch文件夹权限
chmod -R 777 /root/mydocker/elasticsearch/
重新启动
docker start ID号
重新访问9200端口
安装 Kibana
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://192.168.247.111:9200 -p 5601:5601 -d kibana:7.10.1
http://192.168.247.111:5601/
出现 Kibana server is not ready yet
docker logs ID 查看日志在做详细处理
安装 Nginx
在 /root/mydocker 目录下
mkdir nginx
mkdir conf
mkdir html
mkdir logs
docker pull nginx:1.19
docker run -p 80:80 --name nginx -d nginx:1.19
在 /root/mydocker/ 目录下执行 docker container cp nginx:/etc/nginx .
docker stop nginx
docker rm nginx
创建新的nginx
docker run -d -p 80:80 --name nginx -v /root/mydocker/nginx/html:/usr/share/nginx/html -v /root/mydocker/nginx/logs:/var/log/nginx -v /root/mydocker/nginx/conf:/etc/nginx/ nginx:1.19
安装rabbitmq
拉取镜像
docker pull rabbitmq:management
docker run -d --name rabbitmq -p 5671:5671 -p 5672:5672 -p 4369:4369 -p 15671:15671 -p 15672:15672 rabbitmq:management
docker 重启 rabbitmq 自动重启
docker update rabbitmq --restart=always
访问后台
ip:15672
用户密码都是guest
安装 Zipkin
docker run -d -p 9411:9411 openzipkin/zipkin
本地镜像发布阿里云
本地镜像发布到阿里云流程
镜像生成方法
dockerfile
docker run -it mycentos:1.2 生成 ed6d63543489
docker commit -a zgx -m \"new centos ip and vim\" ed6d63543489 mycentos2.0
将本地镜像推送到阿里云
1登录阿里云创建镜像仓库(本地仓库)
将阿里云镜像下载到本地
拉取参考 阿里云文档
0 条评论
回复 删除
下一页