目录
三、dockerfile 、docker镜像、 docker 容器
前言:
学习一个新东西一定要知道这个东西是什么,要解决什么样的问题。
本文只是写给docker初学者,如果你已经是一个老鸟,请点击以下链接深入学习。
https://vuepress.mirror.docker-practice.com/introduction/what.html
一、什么是docker
我只谈谈自己的理解,我们一般程序是运行在操作系统中的比如windows、linux或者macOS。如果大家都使用过vmware就知道,我们可以在当前操作系统中虚拟出N个其他操作系统。其实简单理解,Docker也是一样,可以在当前操作系统中虚拟出N个其他系统,他跟vmware的作用是一样的,但是系统是极简的。
二、为什么要使用docker
使用docker的主要原因其实就是开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些 bug 并未在开发过程中被发现。而 Docker 的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性,从而不会再出现 「这段代码在我机器上没问题啊」这类问题。能做到这样的原因是,一个docker容器是一个沙箱一样的隔离环境,可以理解为我们已经预编译好了一切,连运行的环境都已经预编好了。
我们可以发现,传统的部署方式,如果环境稍微有不一样就可能根本跑不起来,但是docker能固化运行环境。
三、dockerfile 、docker镜像、 docker 容器
dockerfile比较好理解,其实就是用来构建镜像的配置文件。具体这个镜像最后做成什么样子是由dockfile决定的。
两个类比可以很好的理解什么是docker镜像 docker容器。
- 同样以vmware为例子,我们在vmvare中新建虚拟机的时候需要导入CentOS-7-x86_64-DVD-1511.iso 这样的系统文件,这个文件就可以看做是docker 镜像,那么我们导入之后,运行起来的虚拟机就可以看做是docker容器,只是,docker容器中已经把要运行的软件已经安装好了。
- 如果没有使用过vmvare,没有关系,我们还有一个例子。docker镜像就好似我们的Class类,容器呢就像我们Class new 出来的实例。可把镜像看做是模板,容器就是通过这个模板造出来的实际的东西。
四、安装Docker
4.1系统要求
以Centos7为例,且Docker 要求操作系统必须为64位,且centos内核版本为3.1及以上。
uname -r
4.2卸载旧版
yum remove docker docker-common docker-selinux docker-engine
yum remove docker-ce
卸载后将保留/var/lib/docker的内容(镜像、容器、存储卷和网络等)。
rm -rf /var/lib/docker
4.3 安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
#安装前可查看device-mapper-persistent-data和lvm2是否已经安装
rpm -qa|grep device-mapper-persistent-data
rpm -qa|grep lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum makecache fast
4.4 安装
yum install docker-ce -y
yum list docker-ce.x86_64 --showduplicates | sort -r
docker version
4.5 配置镜像加速
这里使用阿里云的免费镜像加速服务,也可以使用其他如时速云、网易云等
3.找到/etc/docker目录下的daemon.json文件,没有则直接vi daemon.json
{
"registry-mirrors": ["https://zfzbet67.mirror.aliyuncs.com"]
}
systemctl daemon-reload
{
"registry-mirrors": ["https://zfzbet67.mirror.aliyuncs.com"]
}
systemctl daemon-reload
systemctl restart docker
五、镜像常用操作
查找镜像:
docker search 关键词
下载镜像:
docker pull 镜像名:TAG
# Tag表示版本,有些镜像的版本显示latest,为最新版本
查看镜像:
docker images
删除镜像:
docker rmi -f 镜像ID或者镜像名:TAG
获取元信息:
docker inspect 镜像ID或者镜像名:TAG
六、容器常用操作
docker run --name 容器名 -i -t -p 主机端口:容器端口 -d -v 主机目录:容器目录:ro 镜像ID或镜像名:TAG
# -v 指定挂载主机目录到容器目录,默认为rw读写模式,ro表示只读
docker ps -a -q
docker start 容器ID或容器名
docker stop 容器ID或容器名
docker rm -f 容器ID或容器名
docker logs 容器ID或容器名
docker exec -it 容器ID或者容器名 /bin/bash
# /bin/bash是固有写法,作用是因为docker后台必须运行一个进程,否则容器就会退出,在这里表示启动容器后启动bash。
docker cp 主机文件路径 容器ID或容器名:容器路径 #主机中文件拷贝到容器中
docker cp 容器ID或容器名:容器路径 主机文件路径 #容器中文件拷贝到主机中
docker inspect 容器ID或容器名
七、安装Mysql
docker pull mysql:5.7
mkdir -p /my/mysql/conf
mkdir -p /my/mysql/data
mkdir -p /my/mysql/logs
docker cp mysql:/etc/mysql/mysql.conf.d/mysqld.cnf /my/mysql/conf/
vi /my/mysql/conf/mysqld.conf
docker run --name mysql -p 3306:3306 -v /my/mysql/conf:/etc/mysql/mysql.conf.d/ -v /my/mysql/data:/var/lib/mysql -v /my/mysql/logs:/logs -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
PS:Docker File 的命令可以参考这篇文章:https://www.cnblogs.com/linjiqin/p/8735230.html