超详细docker入门级教程

何夜息随笔录-docker入门级教程

什么是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.0

8.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集群的管理,以后再补充吧。

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值