超详细docker入门级教程
何夜息随笔录-docker入门级教程
文章目录
- 何夜息随笔录-docker入门级教程
- 什么是docker
- docker的组成
- 安装docker
- 卸载docker
- 阿里云镜像加速
- docker的运行流程
- docker 镜像命令
- docker 容器命令
- 从docker容器内复制文件到主机
- docker配置`mysql`服务
- commit 提交容器为镜像
- 容器数据卷
- `DockerFile`
- 结语
什么是docker
官方:docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。简言之,就是可以在Linux上镜像使用的这么一个容器。
通俗来说:就是一个容器,可以把我们的开发环境打包成容器,在服务器上不需要再配置环境,可以直接运行。
特别之处:Docker是基于Linux 64bit
的,在32位机器上无法运行。
docker是基于Go语言开发的开源项目。
运行机制:虚拟机的话呢,是在虚拟机内部安装了一套系统,是相当于一台电脑,所以占用空间很大。但是这个docker呢,我们把一套环境弄成一个小容器,这个里只有应用和应用所需的环境,没有系统的内核,只有docker里有内核,容器里没有内核,而虚拟机是自带系统底层的内核的,所以docker非常小,就行一个jar包一样,然后docker就像一个集装箱,把这些容器都放到里面,都可以单独运行,而且容器之间是相互隔离的,完全不受影响,这就是docker的好处和优点。
docker的组成
docker大的有三部分组成:
仓库:仓库里有镜像(image),这个镜像就是具体服务器的镜像,比如mysql,这个很好理解,类似于装系统的系统镜像。仓库有共有的仓库和私有的仓库,
服务器:有了镜像,我们需要运行镜像里的应用,就需要在服务器中创建容器(container)来给镜像运行,每个容器都独立运行。容器可以启动、删除、停止。容器就是一个微型的linux
系统,给应用运行的环境。
客户端:然后有了容器,容器里有了镜像后,就可以通过客户端来启动和管理容器了。
安装docker
首先需要先下载docker,可以根据官网的文档来安装
https://docs.docker.com/engine/install/centos/安装工具包
sudo yum install -y yum-utils
配置镜像仓库
sudo yum-config-manager \--add-repo \http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新yum
yum makecache
安装docker
sudo yum install docker-ce docker-ce-cli containerd.io
然后给我报错了
这是说containerd.io
的版本需要大于1.2.2才能和ce
匹配,所以可以先安装这个
yum install https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpm
再安装另外两个
sudo yum install docker-ce docker-ce-cli
然后就OK了
然后来启动一下docker
sudo systemctl start docker
然后运行hello,world
sudo docker run hello-world
查看一下运行的镜像 docker images
卸载docker
卸载很方便,两个命令搞定
sudo yum remove docker-ce docker-ce-cli containerd.io
sudo rm -rf /var/lib/docker
阿里云镜像加速
为了让拉镜像更快,我们可以使用阿里云提供的镜像加速,登录阿里云,找到容器加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://5uymbrzd.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker的运行流程
docker会先在本机查找是否有要运行的镜像,如果有就运行,如果没有就会去远程docker Hub下载到本机,然后运行。
docker 镜像命令
#查看docker的信息
docker version
docker info查询所有镜像
docker images
搜索镜像,可以通过搜索命令搜索想要的镜像,会去hub.docker.com
中去找。
docker search mysql
下载镜像,这个和git很像,都是pull拉过来就行。
刚好我需要下载一个mysql8.0
的
docker pull mysql:8.08.0: Pulling from library/mysql
bb79b6b2107f: Pull complete
49e22f6fb9f7: Pull complete
842b1255668c: Pull complete
9f48d1f43000: Pull complete
c693f0615bce: Pull complete
8a621b9dbed2: Pull complete
0807d32aef13: Pull complete
a56aca0feb17: Pull complete
de9d45fd0f07: Pull complete
1d68a49161cc: Pull complete
d16d318b774e: Pull complete
49e112c55976: Pull complete
Digest: sha256:8c17271df53ee3b843d6e16d46cff13f22c9c04d6982eb15a9a47bd5c9ac7e2d
Status: Downloaded newer image for mysql:8.0
docker.io/library/mysql:8.0
这样就下载好了,很方便
删除镜像,删除镜像可以通过docker images查看镜像id进行删除
docker rmi -f bf756fb1ae65 #也可以通过name删除
docker 容器命令
有了镜像以后,我们就可以创建容器,来运行这个镜像了,是通过Docker run 镜像名字 来运行的,这里我们可以下载一个微型的centos
镜像,然后运行它。
加了镜像名字,就会为这个镜像自动创建一个容器,把这个容器在隔离的单独的容器中运行。
#运行格式
docker run [命令参数] 镜像名称参数解释
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;例如
docker run -it centos /bin/bash
这样就进入了刚才运行的centos容器中,里面就是这个容器的命令,exit可以退出
然后我们需要查看运行了哪些容器,可以使ps命令
删除容器:要删除容器,和删除镜像一样,根据容器id来删除,那么我们需要先通过查询容器进程来获取id
docker ps -a #查询所有容器,获得id
docker rm -f 容器id
docker rm -f 4dbbea3feab6
管理容器,我们需要对各种容器进行停止,启动,重启,删除。
删除已经说过了,现在介绍下另外的,其实都是通用的:docker 动作 容器id
启动容器
docker start 容器id
重启
docker restart 容器id
停止
docker stop 容器id示范docker run -it -d centos 后台启动容器
docker ps 获取id
docker stop 4f4882175e5c 停止容器
docker start 4f4882175e5c 启动容器
进入容器:后台运行容器后,我们也需要进入容器进行命令操作,这时候可以使用exec命令。
docker exec -it 4f4882175e5c /bin/bash
docker exec -it 容器id
从docker容器内复制文件到主机
比如在容器中运作着一个centos
主机,需要从那里拷贝文件出来到真实的主机上。
docker cp 容器id:容器内文件路径 主机的路径例子
docker exec -it 4f4882175e5c /bin/bash 进入容器
echo "你好" > hyx.txt 创建文件把容器里home中的文件复制到主机中
docker cp 4f4882175e5c:/home/hyx.txt /home
docker配置mysql
服务
现在就来实践一下利用docker来配置mysql8
#搜索
docker search mysql
#下载镜像
docker pull mysql:8.0
#启动mysql服务
docker run -itd --name mysql8 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root密码 db2b37ec6181
#查看容器是否存在
docker ps
#进入mysql容器
docker exec -it mysql8 bash
mysql -u root -p
#添加远程登录用户 docker的mysql镜像已经默认打开了远程登录
这里整了半天,远程连不上,是因为阿里云安全组没有开通3306端口,所以记得开一下
use mysql;
select user,host from user;
可以看到root有两个账号,可以先把%的这个记录删除
delete from user where host="%" and user="root";
删除之后,就修改剩余 root 用户 ,把host修改为%
update user set host = '%' where user = 'root';
FLUSH PRIVILEGES;
alter user 'root'@'%' identified with mysql_native_password by '连接密码';
flush privileges;
commit 提交容器为镜像
我们通过镜像运行容器,然后对容器进行了修改了,配置了我们想要的环境后,如果我们想分享给别人,让别人直接下载我配好的镜像运行,这时候就需要commit命令了,就像git 提交项目到本地仓库一样。
查看运行的mysql的容器id,这个mysql是我们配置好的,这时候我们想要提交这个容器命令
docker ps命令
docker commit -m="描述信息" -a="作者" 容器id 镜像名:版本
docker commit -m="修改好的mysql" -a="何夜息" 66977437ea53 hyx_mysql:1.1查看新建的镜像
docker images
容器数据卷
数据卷挂载呢,简单来说就是为了同步容器内的数据到容器外。比如我们运行一个了一个mysql容器,如果不挂载到宿主机,那么当我们删除容器的时候,容器里面的数据也就没了。为了达到删除容器后,容器里的数据还能保存在主机上,就需要这个同步功能。
把容器里的目录和主机里的目录绑定后,数据是双向的,也就是在主机中修改或者创建文件,会同步到容器中,就算容器没有运行,下次启动时也会运行。同样,容器里的目录创建和修改文件,也都会同步到主机中。
那如何挂载呢?我们只需要在主机运行时,加-v参数就行。
docker run -itd --name 名字 -p 主机端口:容器端口 -v 主机目录:容器目录 镜像id或名字分别用-v挂载配置文件和数据目录
docker run -itd --name mysql8 -p 主机端口:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=密码 镜像id
数据卷挂载的时候,可以指定主机目录,也可以不指定目录,有三种方式。
1. -v 主机目录:容器目录
2. -v 容器目录 这是匿名挂载
3. -v 卷名:容器目录 这是具名挂载那么2和3会挂载到主机哪里呢?会挂载到主机 /var/lib/docker/volumes/xxxx 这里
DockerFile
dockerFile
是用来编写我们自己的镜像的,这里一般都是构建镜像的命令,就像是一个脚本,然后dockerfile编写好后,通过docker build 命令开始构造一个镜像。
镜像构造完后,我们可以运行镜像,也可以上传这个镜像到DockerHub
给其他人下载。
DockerFile
命令
构建dockerfile
需要编写文件的命令
所有命令都是大写
FROM #代表基础镜像,比如centos等这些运载平台
ADD #我们需要自己加的组件,比如mysql,tomcat这些
VOLUME #要挂载的数据卷目录
EXPORS #暴露端口
CMD #容器运行时会执行的命令
COPY #复制文件
ENV #环境变量,就是设置常量值
现在就在构造一个自己的centos
镜像
vim /home/docker_file/df_mycentos编写docker file文件FROM centos
MAINTAINER 何夜息
ENV WORKPATH /usr/local
WORKDIR $WORKPATH
RUN yum -y install vim
CMD echo "欢迎使用何夜息的centos镜像"
CMD /bin/bash
写好后,我们就可以构建了
docker build -f df_my_centos -t hyx_centos:1.0 . #-f代表dockerfile文件名 -t代表镜像名和版本 .代表当前目录
安装过程有点长。。。
然后运行一下我们创建的镜像
就可以使用我们自己装的vim了,不然默认的centos
镜像是没有vim工具的。
结语
这里就简单结束了,学无止境,后面的容器之间的通信,docker集群的管理,以后再补充吧。
超详细docker入门级教程相关推荐
- YOLOv5超详细的入门级教程(训练篇)(一)——训练自制数据集(识别鱼类)
Pytorch-YOLOv5 数据集标注 数据集制作 修改配置文件 修改coco.yaml文件 修改model.yaml文件 训练train.py 出现的问题 测试detect.py 结论 Refer ...
- YOLOv5超详细的入门级教程(训练篇)(四)——利用远程服务器训练模型
利用远程服务器训练模型 修改train.py文件 进行训练 1.传文件到服务器 2.环境配置与进行训练 出现的问题 我是一个非常懒蛋的人,如果不记录博客的话,遇到一点点问题就不想解决了. 感觉记录博客 ...
- 超强、超详细Redis入门教程【转】
这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下 [本教程目录] 1.redis是什么 2.redis的作者何许人也 3.谁在使用r ...
- Tomcat安装及配置教程(超详细的图文教程)(亲测)
Tomcat安装及配置教程(超详细的图文教程) 1.什么是Tomcat Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下 ...
- springboot超详细教程_CG原画插画教程:超详细线稿教程
艺学绘小编收集整理了超详细线稿教程 今天我们从起稿开始 1. 用圆表示出人物的头部.胸腔和骨盆,分别画出头部的十字线和身体的中线,表示头和身体的朝向.用"火柴棍"表示四肢的动作形态 ...
- mysql2008数据库配置_SQL Server 2008 R2 超详细安装图文教程
这篇文章主要介绍了SQL Server 2008 R2 超详细安装图文教程,需要的朋友可以参考下 一.下载SQL Server 2008 R2安装文件 二.将安装文件刻录成光盘或者用虚拟光驱加载,或者 ...
- [转](转载+整理)超详细的cmake教程
cmake教程 参考 什么是cmake cmake 常见语法罗列 CMake可用变量 入门案例 单个源文件 多个源文件 同一目录,多个源文件 多个目录,多个源文件 进阶案例 自定义编译选项 指定安装和 ...
- win10时间不准_【装机教程】超详细WIN10系统安装教程,官方ISO直装与PE两种方法教程...
P1:官方ISO镜像直装 超详细WIN10系统安装教程 P1https://www.zhihu.com/video/1186597662923718656 P2:微PE辅助安装 超详细WIN10系统安 ...
- 虚拟机屏幕显示不全(界面大小更改 )虚拟机Ubuntu18.04 的超详细环境搭建教程/步骤 SDN软件定义网络实验
打开虚拟机后,我们可能发现,桌面周围有大量黑边,且有些界面无法完整显示,影响我们的感受和操作!!! 解决方法: (1)点击箭头所指,进入目录 (2)点击箭头所指的齿轮,进入"setting ...
最新文章
- java 8 lambda表达式
- WPF自定义控件(四)の自定义控件
- UA MATH567 高维统计IV Lipschitz组合4 对称群上的均匀分布
- 首航节能:光热行业刚起步 子公司处于亏损状态
- Codeforces Beta Round #17 C. Balance DP
- java jquery_jQuery数据表和Java集成
- PL/SQL 存储过程
- python之多并发socket
- java反编译软件_安卓强大的逆向软件,媲美MT管理器!
- 远程调试运行在Resin上面的Web应用程序
- iOS 给测试人员测试手机APP的四种方法:真机运行(略),打ipa包,(testFlighe)邮件,蒲公英(一)打ipa包
- 银行数据仓库体系实践(13)--数据应用之监管报送
- 代码整洁之道之总结篇
- nyoj-234-吃土豆(动态规划)
- 计算机综合症怎么治,哪些运动可以用来治疗“电脑综合症”
- 智能配时、图片识别…AI为你的春运保驾护航!
- 2022高性价蓝牙耳机排名,500元内真无线蓝牙耳机品牌推荐
- 超声波测距 c语言程序流程图,超声波测距程序(详细C语言数码管显示)
- 什么是软文营销?为什么做软文营销?
- 如何在集群上运行Shark