何夜息随笔录-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入门级教程相关推荐

  1. YOLOv5超详细的入门级教程(训练篇)(一)——训练自制数据集(识别鱼类)

    Pytorch-YOLOv5 数据集标注 数据集制作 修改配置文件 修改coco.yaml文件 修改model.yaml文件 训练train.py 出现的问题 测试detect.py 结论 Refer ...

  2. YOLOv5超详细的入门级教程(训练篇)(四)——利用远程服务器训练模型

    利用远程服务器训练模型 修改train.py文件 进行训练 1.传文件到服务器 2.环境配置与进行训练 出现的问题 我是一个非常懒蛋的人,如果不记录博客的话,遇到一点点问题就不想解决了. 感觉记录博客 ...

  3. 超强、超详细Redis入门教程【转】

    这篇文章主要介绍了超强.超详细Redis入门教程,本文详细介绍了Redis数据库各个方面的知识,需要的朋友可以参考下 [本教程目录] 1.redis是什么 2.redis的作者何许人也 3.谁在使用r ...

  4. Tomcat安装及配置教程(超详细的图文教程)(亲测)

    Tomcat安装及配置教程(超详细的图文教程) 1.什么是Tomcat Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下 ...

  5. springboot超详细教程_CG原画插画教程:超详细线稿教程

    艺学绘小编收集整理了超详细线稿教程 今天我们从起稿开始 1. 用圆表示出人物的头部.胸腔和骨盆,分别画出头部的十字线和身体的中线,表示头和身体的朝向.用"火柴棍"表示四肢的动作形态 ...

  6. mysql2008数据库配置_SQL Server 2008 R2 超详细安装图文教程

    这篇文章主要介绍了SQL Server 2008 R2 超详细安装图文教程,需要的朋友可以参考下 一.下载SQL Server 2008 R2安装文件 二.将安装文件刻录成光盘或者用虚拟光驱加载,或者 ...

  7. [转](转载+整理)超详细的cmake教程

    cmake教程 参考 什么是cmake cmake 常见语法罗列 CMake可用变量 入门案例 单个源文件 多个源文件 同一目录,多个源文件 多个目录,多个源文件 进阶案例 自定义编译选项 指定安装和 ...

  8. win10时间不准_【装机教程】超详细WIN10系统安装教程,官方ISO直装与PE两种方法教程...

    P1:官方ISO镜像直装 超详细WIN10系统安装教程 P1https://www.zhihu.com/video/1186597662923718656 P2:微PE辅助安装 超详细WIN10系统安 ...

  9. 虚拟机屏幕显示不全(界面大小更改 )虚拟机Ubuntu18.04 的超详细环境搭建教程/步骤 SDN软件定义网络实验

    打开虚拟机后,我们可能发现,桌面周围有大量黑边,且有些界面无法完整显示,影响我们的感受和操作!!!  解决方法: (1)点击箭头所指,进入目录 (2)点击箭头所指的齿轮,进入"setting ...

最新文章

  1. java 8 lambda表达式
  2. WPF自定义控件(四)の自定义控件
  3. UA MATH567 高维统计IV Lipschitz组合4 对称群上的均匀分布
  4. 首航节能:光热行业刚起步 子公司处于亏损状态
  5. Codeforces Beta Round #17 C. Balance DP
  6. java jquery_jQuery数据表和Java集成
  7. PL/SQL 存储过程
  8. python之多并发socket
  9. java反编译软件_安卓强大的逆向软件,媲美MT管理器!
  10. 远程调试运行在Resin上面的Web应用程序
  11. iOS 给测试人员测试手机APP的四种方法:真机运行(略),打ipa包,(testFlighe)邮件,蒲公英(一)打ipa包
  12. 银行数据仓库体系实践(13)--数据应用之监管报送
  13. 代码整洁之道之总结篇
  14. nyoj-234-吃土豆(动态规划)
  15. 计算机综合症怎么治,哪些运动可以用来治疗“电脑综合症”
  16. 智能配时、图片识别…AI为你的春运保驾护航!
  17. 2022高性价蓝牙耳机排名,500元内真无线蓝牙耳机品牌推荐
  18. 超声波测距 c语言程序流程图,超声波测距程序(详细C语言数码管显示)
  19. 什么是软文营销?为什么做软文营销?
  20. 如何在集群上运行Shark

热门文章

  1. 可靠的UDP (RUDP)
  2. 博彦科技4亿定增图谋境外软件外包 现金流考验
  3. 网贷行业马太效应加剧,泰然金融稳居行业头部平台
  4. 全文检索工具elasticsearch:第一章:理论知识
  5. 【教程】解决Windows下kiftd无法访问的问题(Windows防火墙设置)
  6. Socket通信客户端报错Connection reset
  7. 计算机内存配置选型,电脑内存条如何选择 电脑内存条选择方法【详细介绍】...
  8. Cocos2d-x高级开发教程:制作自己的《捕鱼达人》
  9. 建了个自媒体 视频剪辑交流裙 有没有一起的吖
  10. 开发者账号APP转让流程