栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

docker基础学习

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

docker基础学习

Docker基础学习 Docker概述 Docker为什么出现?

问题:①我在我的电脑上是可以运行的!②版本更新,导致服务器无法使用!

环境配置是十分麻烦的,每一台机器都要部署环境,费时费力。

传统:开发jar,运维来部署

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

Docker给出了解决方案

隔离:Docker的核心思想,打包装箱,每个箱子相互隔离。

Docker通过隔离机制,可以将服务器利用到极致

Docker历史

Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源。
Docker自2013年以来非常火热,无论是从 github 上的代码活跃度,还是Redhat在RHEL6.5中集成对Docker的支持, 就连 Google 的 Compute Engine 也支持 docker 在其之上运行。

2014年4月9日,Docker1.0发布。

在Docker容器技术之前,都是虚拟机技术

虚拟机:属于虚拟化技术,在Windows中装一个VMWare,通过这个软件可以虚拟出一台甚至多台电脑!笨重!

Docker容器技术,也是一种虚拟化技术,轻巧。

官网:Empowering App Development for Developers | Docker

文档:Docker documentation | Docker documentation

仓库地址:Docker Hub

Docker能干嘛

虚拟化技术特点:1.资源占用多 2.冗余步骤多 3.启动很慢

容器化技术:容器化技术不是模拟的一个完整的操作系统

比较Docker和虚拟机的不同:

  • 传统虚拟机,虚拟出硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件。

  • Docker容器内的应用直接运行在宿主机的内容,容器是没有自己的内核的,也没有虚拟硬件。

  • 每个容器都是相互隔离的,每个容器都有属于自己的文件系统,互不影响。

DevOps(开发、运维)

应用更快速的交付和部署

传统:一堆帮助文档,安装程序

Docker:打包镜像发布测试,一键运用

更快捷的升级和扩缩容

使用Docker后部署应用像搭积木一样!

项目打包为一个镜像,通过水平扩展

更简单的系统运维

在容器化后,开发测试环境高度一致

更高效的计算资源利用

Docker是内核级别的虚拟化,可以在一个物理机上运行很多容器实例,将服务器性能压榨到极致

Docker安装 Docker的基本组成

镜像(Image):

docker镜像好比是一个模板,可以通过这个模板来创建容器服务,tomcat镜像-》run-》tomcat01容器

通过这个镜像可以创建多个容器,最终服务运行或项目运行就是在容器中

容器(container):

Docker利用容器技术,独立运行一个或者一组应用,通过镜像来创建

基本命令:启动,停止,删除等

仓库(repository):

存放镜像的地方,分为公有,私有

DockerHub(默认为国外的)

阿里云(配置镜像加速)

安装Docker

环境准备

CentOS 7、Xshell连接远程服务器进行操作

环境查看

#系统内核是3.10以上的
uname -r
3.10.0-1160.36.2.el7.x86_64
#系统版本
# cat /etc/os-release
NAME="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、卸载旧版本
yum remove docker 
                  docker-client 
                  docker-client-latest 
                  docker-common 
                  docker-latest 
                  docker-latest-logrotate 
                  docker-logrotate 
                  docker-engine
                  
#2、需要的安装包
yum install -y yum-utils

#3、设置镜像的仓库(二选一)
yum-config-manager 
    --add-repo 
    https://download.docker.com/linux/centos/docker-ce.repo#默认国外的
    
yum-config-manager 
    --add-repo 
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo#阿里云(推荐)

#更新软件包索引
yum makecache fast

#4、安装docker相关的内容
yum install docker-ce docker-ce-cli containerd.io
#一路y下去

#5、启动docker
systemctl start docker

#6、docker version查看是否安装成功

#7、使用hello-world测试
docker run hello-world

#8、查看下载的镜像
docker images

#9、卸载docker
yum remove docker-ce docker-ce-cli containerd.io #删除依赖
rm -rf /var/lib/docker #删除资源
rm -rf /var/lib/containerd
阿里云镜像加速

1、登录阿里云找到容器服务

2、找到镜像加速地址

3、配置使用

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://g8h9tnqk.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
回顾HelloWorld流程

底层原理

Docker是怎么工作的?

Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上,通过Socket从客户端访问!

DockerServer接收到Docker-Client的指令,就会执行这个命令!

Docker为什么比VM快?

1、Docker有着比VM更少的抽象层

2、Docker利用的是宿主机的内核,vm需要的是Guest OS。

docker不需要像虚拟机一样重新加载一个操作系统内核。

Docker的常用命令 帮助命令
docker version #显示docker的版本信息
docker info #显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help #帮助命令

帮助文档地址:Reference documentation | Docker documentation

镜像命令

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

#解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的ID
CREATED 镜像的创建时间
SIZE 镜像的大小

#可选项
  -a, --all             #列出所有镜像
  -q, --quiet           #只显示镜像的ID

docker search:搜索镜像

docker search mysql
NAME                              DEscriptION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   11526     [OK]       
mariadb                           MariaDB Server is a high performing open sou…   4373      [OK]       
mysql/mysql-server                Optimized MySQL Server Docker images. Create…   851                  [OK]
percona                           Percona Server is a fork of the MySQL relati…   558       [OK]      

#可选项
  -f, --filter          
  eg:--filter=STARS=3000:搜索3000星以上的

doucker pull:下载镜像

docker pull 镜像名[:tag]

docker rmi:删除镜像

docker rmi-f 镜像ID #删除指定镜像
docker rmi-f 镜像ID 镜像ID 镜像ID... #删除多个镜像
docker rmi-f ${docker images -aq} #删除全部镜像
容器命令

新建容器并启动

docker run {可选参数} image
# 参数说明
--name="name" 容器名字
-d  后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p  指定容器的端口  -p 8080:8080
	-p  ip:主机端口:容器端口
	-p  主机端口:容器端口(常用)
	-p  容器端口
	容器端口
-P  随机指定端口

#测试,启动并进入容器
docker run -it centos /bin/bash

列出所有运行中的容器

docker ps
#参数
   #列出所有正在运行的容器
-a #列出所有正在运行的容器,带出历史运行过的容器
-n=? #显示最近创建的n个容器
-q #只显示容器的编号

退出容器

exit   #直接容器停止并退出
ctrl + P + Q #容器不停止并退出

删除容器

docker rm 容器ID  #删除指定容器
docker rm -f #{docker ps -aq}  #删除所有的容器
docker ps -a -q|xargs docker rm #删除所有的容器

#参数
-f 强制删除

启动和停止容器

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

常用其它命令

后台启动容器

#命令 docker run -d 镜像名
docker run -d centos

#问题:docker ps发现centos被停止了

#常见的坑:docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
#容器启动后发现自己没有提供服务,就会立刻停止,就是没有程序了

查看日志

docker logs

-tf #显示日志
--tail n #显示n条日志

查看容器中的进程信息

docker top 容器ID

查看镜像的元数据

docker inspect 容器ID

进入当前正在运行的容器

#方式一 进入容器后开启一个新的终端,可在里面操作
docker exec -it 容器ID bashShell
#方式二 进入容器正在执行的终端,不会启动新的进程
docker attach 容器ID

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

docker cp 容器id:容器内路径 目的的主机路径
可视化
  • portainer(先用这个)
docker run -d -p 8088:9000 
--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true potainer/potainer
  • Rancher(CI/CD)

什么是portainer?

Docker图形化界面管理工具!提供一个后台面板!

Docker镜像讲解 镜像是什么

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。

所有的应用,直接打包docker镜像,方便扩展和部署。

如何得到镜像:

  • 从远程仓库下载
  • 拷贝
  • 自己制作镜像DockerFile
Docker镜像加载原理

Docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统是UnionFS联合文件系统。

Commit镜像
docker commit #提交容器成为一个新的副本

docker commit -m="提交的描述信息" -a="作者" 容器ID 目标镜像名:[TAG]
容器数据卷 什么是容器数据卷

容器之间可以有一个数据共享的技术!Docker容器中产生的数据,同步到本地!就是卷技术!

实现容器的持久化与同步操作。

使用容器数据卷

方式一:直接使用命令来挂载 -v

docker run -it -v 主机目录:容器内目录

#测试
docker run -it -v /home/ceshi:/home centos /bin/bash
具名挂载和匿名挂载
#匿名挂载
-v 容器内路径
docker run -d -P --name nginx01 -v /etc/nginx nginx

#查看所有卷的情况
docker volune ls

#具名挂载
docker run -d -P --name nginx02 -v xxxxxx:etc/nginx nginx
-v 容器内路径 #匿名挂载
-v 卷名:容器内路径 #具名挂载
-v /宿主机路径::容器内路径 #指定路径挂载
#通过 -v 容器内路径:ro/rw 改变读写路径
ro:只读
re:可读可写

docker run -d -P --name nginx02 -v xxxxxx:etc/nginx:ro nginx
docker run -d -P --name nginx02 -v xxxxxx:etc/nginx:rw nginx
初识Dockerfile

Dockerfile就是用来构建docker镜像的构建文件!命令脚本!

方式二:

dockerfile

FROM centos

VOLUME ["volume01","volume02"]

CMD echo "---end---"
CMD /bin/bash

构建镜像

docker build -f /home/docker-test/dockerfile1 -t xxx/centos:1.0 .
数据卷容器

可以使两个mysql甚至多个mysql同步数据

--volumes-from

#例子
docker run -it --name docker02 --volumes-from docker01 xxx/centos:1.0

多个mysql实现数据共享

#启动mysql01
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v
/home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=XXXX --name mysql01 mysql:5.7

#启动mysql02
docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=XXXX --name mysql02 --volumes-from mysql01 mysql:5.7

容器的生命周期一直持续到没有容器使用为止。

持续化到了本地,本地数据不会被删除。

DockerFile DockerFile介绍

dockerfile是用来构建docker镜像的文件!命令参数脚本!

构建步骤:

1、编写一个dockerfile文件

2、docker build构建成为一个镜像

3、docker run 运行镜像

4、docker push 发布镜像

DockerFile构建过程

基础知识:

1、每个保留关键字(指令)都必须大写

2、指令从上到下顺序执行

3、#表示注释

4、每一个指令都会创建提交一个新的镜像层,并提交

DockerFile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件

DockerFile指令
FROM        #基础镜像,一切从这开始构建
MAINTAINER  #镜像作者,一般姓名+邮箱
RUN         #镜像构建的时候需要运行的命令
ADD         #添加内容
WORKDIR     #镜像的工作目录  /bin/bash等
VOLUME      #挂载的目录位置
EXPOSE      #指定暴露端口
CMD         #指定这个容器启动的时候要运行的命令,只有最后一个会生效,会被替代
ENTRYPOINT  #指定这个容器启动的时候要运行的命令,可以追加命令
onBUILD     #当构建一个被继承的DockerFile时,会运行该指令,触发指令。
COPY        #将文件拷贝到镜像中
ENV         #构建的时候设置环境变量

未完待续

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/321003.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号