Dcoker很早之前还只是运维的学习范畴,但是现在很多公司对于开发都要求懂,了解docker,所以我们不管是跳槽还是在公司可持续化发展,都需要简单的对docker进行一个了解,下面就是我个人学习的初步入门
Dcoker是什么?
首先我们要知道计算机虚拟化,在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部份是不受现有资源的架设方式,地域或物理组态所限制。一般所指的虚拟化资源包括计算能力和资料存储。在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件 对资源充分利用 虚拟化技术种类很多,例如:软件虚拟化、硬件虚拟化、内存虚拟化、网络虚拟化(vip)、桌面虚拟化、服务虚拟化、虚拟机等等.
Docker就是虚拟化的一种,是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 [GitHub](https://github.com/docker/docker) 上进行维护
基本概念:
docker是CS架构,使用的http协议,符合resfult规范
docker里面最重要的两个部分:
docker镜像:镜像是基于一堆文件,相当于虚拟机装了操作系统,又装了软件的一堆文件
docker容器:镜像运行起来,成为了容器【可以理解为虚拟机上面装了一些软件】
其实也可以以开发的角度来理解,镜像可以理解为一个类,而容器可以理解为类产生的对象,我们可以基于某个镜像运行出来很多容器,每一个容器都是不同的,他会有自己的容器ID,就好比我们python中类加括号产生对象一样,每次都会产生一个新对象
docker的镜像来自于哪里:可以从注册中心进行拉取
安装Docker
1.更新我们yum到最新版本
yum update
2.安装依赖:yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
3.设置yum源为阿里云
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4.下载安装docker
sudo yum install docker-ce
5.安装完成以后查看docker的版本
docker -v
6.查看docker运行状态
systemctl status docker
7.启动docker
systemctl start docker
Docker常用命令
# 启动docker:
systemctl start docker
# 停止docker:
systemctl stop docker
# 重启docker:
systemctl restart docker
# 查看docker状态:
systemctl status docker
# 设置开机启动:
systemctl enable docker
# 查看docker概要信息
docker info
# 查看docker帮助文档
docker --help
Docker镜像
docker启动以后,我们就可以通过docker命令到注册中心来拉取镜像,但是因为默认的是国外的镜像站,拉取速度会比较慢一点,所以我们需要设置docker从国内镜像站拉取代码
首先我们在安装docker以后会有docker文件夹,切换到该文件夹,找到daemon.json修改配置文件
我这里使用的是阿里镜像源,需要我们注册一个阿里云的账号,找到专属的docker镜像源加速站然后配置上去
# 切换目录
cd /etc/docker
编辑:
vim /etc/docker/daemon.json
{
"registry-mirrors": ["阿里镜像源"]
}
# 重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker
1.查找镜像
docker search 镜像名称
可以先去hub.docker.com去找镜像的名称
2.拉取镜像,指定标签(指定版本),如果不指定默认拉取的就是最新的
docker pull 镜像名称:标签
# 还可以直接写为
docker pull 镜像名称 # 这个方式就是最新的版本
docker pull centos:latest # 这样也是最新的
3.查看本地拉取的镜像
docker images
4.删除本地镜像
docker rmi 镜像ID # 可以同时删除多个
Docker容器
镜像运行起来就容器,并且一个镜像可以运行处多个容器
查看容器
# 查看运行的容器
docker ps
# 查看所有的容器
docker ps -a
# 查看最后一次运行的容器
docker ps -l
运行容器的简单原理:
1.创建容器:create
2.运行容器:run
实际上如果容器没有创建,直接执行run,就会自动创建并且运行容器,所以我们只需要会run命令即可
-run命令的参数:
-i:表示运行容器
-t:表示容器启动后会进入容器命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)
--name:为创建的容器起一个名字,如果不写会随机生成一个名字
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
重要:因为我们的容器相当于独立的进程,如果程序外部想要访问容器内部的话,就需要我们做端口映射,这样在实际的访问过程中,我们访问宿主机的ip:某个端口,会直接做端口映射,访问到某个具体的容器中
针对容器的命令
# 进入到容器内部(本质是让容器执行命令)
docker exec 容器id 命令
docker exec f82e8578b9b1 ls
docker exec -it f82e8578b9b1 /bin/bash # 进入到容器内部
# 退出
exit
# -v参数:目录映射
docker run -id --name=lqz -v /home/lqz:/lqz centos:7
以后无论在宿主机还是容器中修改当前目录下的文件,都会相互影响
# -p参数:端口映射 容器中启动一个mysql5.7 --》容器中的3306监听,宿主机3306没人监听,做端口映射后,宿主机的3306就被docker的这个容器监听了
# 启动的mysql的root密码是123456
docker run -id --name=mysql -p 80:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
# netstat -nlp |grep 80 查看本机80端口占用情况
# 以后访问宿主机80端口就等于访问容器的3306端口
容器操作
启动容器
docker start 容器id
停止容器
docker stop 容器id
文件拷贝
# 容器的文件copy到宿主机上(不是在容器内执行)
docker cp 容器名称:容器目录 需要拷贝的文件或目录
docker cp 20fd8:/home/lqz.txt /home/lqz.txt
# 宿主机的文件copy到容器中
docker cp 需要拷贝的文件或目录 容器名称:容器目录
docker cp ./lqz.txt 20fd894a3f20:/home/lqz.txt
查看容器的ip地址
查看容器IP地址
docker inspect 容器名称 # 查看容器的详细描述,很多
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)
删除容器
docker rm 容器id
容器的迁移与备份
我们也可以基于某个容器,将这个容器作为一个镜像,这样做的好处就是我们某个配置好的容器,以后只需要拉取这个镜像就,然后run跑起来就已经是一个满足需求的容器
# 容器保存为镜像
-运行一个centos容器
docker run -id --name centos_vim centos:7
-在容器中装vim
docker exec -it a6e240 /bin/bash
yum install vim -y
-把容器做成镜像(centos+vim)
docker commit centos_vim centos_vim_image
-把centos_vim 容器删除
docker rm centos_vim
-基于新构建的镜像,运行成容器
docker run -id --name centos_vim centos_vim_image:latest
-进入到容器中,查看,软件都在
docker exec -it id号 /bin/bash
镜像的备份与恢复
docker save -o centos_vim_image.tar centos_vim_image
-删除容器,删除镜像
-把备份的镜像恢复
docker load -i centos_vim_image.tar
Dockerfile
什么是dockerfile?
dockerfile是由一系列命令和参数构成的脚本文件,这些命令应于与基础镜像并最终创建一个新的镜像,dockerfile是面向开发的,发布项目,做镜像,就需要编写dockerfile文件!
Ddockefile的基本命令
FROM 基础镜像 #基于哪个基础镜像来构建
MAINTAINER lqz # 声明镜像的创建者
ENV key value # 设置环境变量 (可以写多条)
RUN command #是Dockerfile的核心部分(可以写多条)
ADD source_dir/file dest_dir/file #将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
COPY source_dir/file dest_dir/file # 和ADD相似,但是如果有压缩文件并不能解压
WORKDIR lqz # 设置工作目录,运行起这个容器,来到的路径就是这个路径
示例展示:
首先我们要创建一个Dockerfile的文件夹,这个是必须得,然后在这个文件夹里面创建一个dockerfile的文件里面写dockerfile命令
FROM centos:7 # 基于centos7的镜像
MAINTAINER centos_one # 起了一个名字
ENV name contos_one # 配置环境变量
RUN yum install vim -y # 执行下载vim
RUN mkdir /centos # 创建一个centsos的目录
RUN touch /centos/ss.py # 创建ss.py的文件
RUN echo 'print(1)' >/centos/ss.py # 执行这个文件
WORKDIR /centos # 设置工作目录
Dockerfile搭建的镜像如果跑不起来可以尝试一下的可能:
1. Dockerfile中没有指定正确的环境变量,导致程序无法正常运行。
2. Dockerfile中没有指定正确的端口映射,导致程序无法正常运行。
3. Dockerfile中没有指定正确的数据卷,导致程序无法正常运行。
4. Dockerfile中没有指定正确的网络模式,导致程序无法正常运行。
5. Dockerfile中没有指定正确的容器启动命令,导致程序无法正常运行。
6. Dockerfile中没有指定正确的容器启动参数,导致程序无法正常运行。
7. Dockerfile中没有指定正确的容器资源限制,导致程序无法正常运行。
Docker命令大全
FROM:指定基础镜像
RUN:构建镜像过程中需要执行的命令,可以多条,docker build
CMD:添加启动容器时需要执行的命令,多条只有最后一条生效,可以在启动容器时被覆盖和修改
ENTRYPOINT:同CMD,但这个一定会被执行,不会被覆盖修改。
MLABELAINTAINER:表明镜像的作者。将被遗弃,被LABEL代替。
EXPOST:设置对外暴露的接口
ENV:设置执行命令时的环境变量,并且在构建完成后,仍然生效
ARG:设置只在构建过程中使用的环境变量,构建完成后,将消失
ADD:将本地文件或目录拷贝到镜像的文件系统中,能解压特定格式文件,能将URL作为要拷贝的文件
COPY:将本地文件或目录拷贝到镜像的文件系统中
WORKDIR:设置工作目录
ONBUILD:如果制作的镜像被另一个Dockerfile使用,将在那里被执行Docekrfile命令
STOPSIGNAL:设置容器退出时发出的关闭信号。
HEALTHCHECK:设置容器状态检查。
SHELL:更改执行shell命令的程序。Linux的默认shell是[“/bin/sh”, “-c”],Windows的是[“cmd”, “/S”, “/C”]。