以下所有学习均使用腾讯云官方镜像Centos7.8,安装后无任何额外安装。***.com域名解析为我服务器的ip,后续不进行解释。
#1.下载Docker的依赖环境
yum -y install yum-utils device-mapper-persistent-date lvm2
#2.设置一下下载Docker的镜像源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#3.安装docker
yum makecache fast
yum install -y docker-ce
#4.启动,并设置为开机自动启动,测试
systemctl start docker
#设置开机自动启动
systemctl enable docker
#测试(参数不用过多纠结没后续1.4中有详细解释)
docker run -d -p 80:80 --name nginx_test nginx
#-d:在后台运行docker
#-p:端口映射,格式为[宿主机端口:容器端口]
#--name:自定义生成容器的名称
#nginx:使用nginx的镜像生成容器,默认从国外网站的
1.Docker官方的中央仓库:这个仓库镜像最全,但是下载速度比较慢
https://hub.docker.com/
2.国内有名的镜像网站:网易蜂巢(需要登陆),daoCloud(可以直接拉取)等等
https://c.163yun.com/hub#/home
https://hub.daocloud.io/ (推荐)
3.自建私服的方式进行拉取镜像,需要额外的资源和添加部分配置。
#需要在/etc/docker/daemon.json,添加配置,(下列配置双引号可能为中文双引号,暂未测试)
{
"registry-mirrors":["https://registry.docker-cn.com"]
"insecure-registries":["ip:prot"]
}
#配置后重启以下两个服务后生效
systemctl daemon-reload
systemctl restart docker
#1.拉取镜像到本地
docker pull 镜像名称[:tag]
#举个🌰
docker pull daocloud.io/library/nginx:1.13.1
#2.查看本地全部的镜像
docker images
#3.删除本地镜像
docker rmi 镜像的标示
#4.镜像的导入导出
#将本地镜像导出
docker save -o 导出路径 镜像id
#加载本地镜像
docker load -i 镜像文件
#修改镜像名称
docker tag 镜像id 新镜像名称[:tag]
#1.运行容器
#简单操作
docker run 镜像的标识|镜像名称[:tag]
#常用的参数
docekr run -d -p 宿主机端口:容器端口 --name 容器名称 镜像标识|镜像名称[:tag]
#举个🌰,在1.1中使用的到的
docker run -d -p 80:80 --name nginx_test nginx
#-d:在后台运行docker
#-p:端口映射,格式为[宿主机端口:容器端口]
#--name:自定义生成容器的名称,后面的nginx_test即为自定义的名称
#nginx:使用nginx的镜像生成容器
#2.查看正在运行的容器
docker ps [-aq]
#-a:查看全部的容器,包括没有运行的
#-q:只查看容器,获取对应的标识
#3.查看容器日志
docker logs -f 容器id
#-f:可以查看日志最新的几行,类似tail -f
#4.进入容器内部的命令行
docker exec -it 容器id|容器名称 /bin/bash
#-d:在后台运行
#-i:即使没有附加也保持STDIN 打开(暂时没搞清楚什么意思,不加无法打开)
#-t:分配一个伪终端
#/bin/bash:调用指令集,也可以只写bash即可,例如docker exec -it 容器id|容器名称 bash
#5.删除容器(删除前需要先停止对应容器)
#停止指定容器
docker stop 容器id
#停止全部容器
docker stop $(docker ps -aq)
#删除指定容器
docker rm 镜像id
#删除全部容器
docekr rm $(docker ps -qa)
#6.启动容器
docker start 容器id
#使用1.3中拉取到本地的nginx镜像即可(需要删除之前的测试容器,否则端口会占用,这里不进行阐述)
docker run -d -p 80:80 --name nginx_test daocloud.io/library/nginx
#nginx镜像生成后,先测试下nginx测试页有没有问题,如果没问题就进行网站配置,这里复制之前准备好的静态网站到容器内部
docker cp /Docker/. nginx_test:/usr/share/nginx/html
#cp:用来在宿主机和容器中拷贝数据
#/Docker/. :这里的“/Docker”存放了准备的网站文件,“/.”意思为将对应目录下的所有文件复制到容器路径下,不加“.”则为复制目录,需要注意(后续本目录还会用到,不再进行解释)
#nginx_test:/usr/share/nginx/html:冒号前为容器id|容器名称,冒号后为容器对应路径
#这里常用nginx的可以知道一般默认的网站目录为/usr/share/nginx/html
mysql仅做测试,我的nginx中没有需要用到数据库的地方
#运行MySQL容器
docker -d -p 3306:3306 --name mysql_test -e MYSQL_ROOT_PASSWORD=root daocloud.io/library/mysql:5.7.4
#-e:指定MySQL启动时的参数,MYSQL_ROOT_PASSWORD=root为设置root用户的密码为root
【数据卷】将宿主机中一个目录映射到容器的目录当中。
为了部署2.1的网站,需要额外使用拷贝命令将宿主机内部的文件复制到容器当中,但是这种方法对于成百上千的容器操作量太过重复,因此可以使用【数据卷】的方法进行容器统一挂在宿主机指定目录。
可以在宿主机中操作目录中的内容,那么容器内映射的文件也会一起改变
#1.创建数据卷
docker volume create 数据卷名称
#创建数据卷后,默认会存放在一个目录下/var/lib/docker/volumes/数据卷名称/_data
#2.查看数据卷的详细信息
docker volume inspect 数据卷名称
#3.查看全部的数据卷
docker volume ls
#4.删除数据卷
docker volume rm 数据卷名称
#5.应用数据卷
#当你映射数据卷时,如果数据卷不存在,Docker会帮你自动创建,同时会讲容器内部自带的文件(容器中的index.html),存储在默认的数据卷存放路径中。
docker run -v 数据卷名称:容器内部路径 镜像id
#直接指定一个路径映射到容器中,这个路径创建后也不会将容器内部的自带文件拷贝过来,需要自行手动添加。
docker run -v 路径:容器内部的路径 镜像id
#举个🌰,使用2.1的网站部署中,直接对/Docker的文件挂载到/usr/share/nginx/html中
docker run -d -p 80:80 --name nginx_test -v /Docker/:/usr/share/nginx/html daocloud.io/library/nginx
中央仓库上的镜像,也是Docker的用户自己上传的
#1.创建一个Dockerfile文件,通过这个文件指定自定义镜像信息。
#Dockerfile文件中常用内容:
form:指定当前自定义镜像依赖的环境
copy:将相对路径下的内容复制到自定义镜像中
workdir:声明镜像的默认工作目录
cmd:需要执行的命令(在workdir下执行的,cmd可以写多个,但只以最后一个为准)
#举个🌰,可以在/Docker目录下编辑如下的Dockerfile,然后进行创建。
from daocloud.io/library/nginx
copy . /usr/share/nginx/html
#. 代表相对目录下所有文件
#2.在/Docker目录下通过Docker的命令制作镜像
docker build -t 镜像名称[:tag] 制作镜像后的存放路径
#-t,--tag:指定镜像名称和标签
#额外常用的build参数有:
#-f:指定要使用的Dockerfile路径
#--quiet, -q:安静模式,成功后只输出镜像 ID
#--cpu-shares:设置 cpu 使用权重
#--cpuset-cpus:指定使用的CPU id;
#--cpuset-mems:指定使用的内存 id;
#-m:设置内存最大值
使用自定义创建后,可直接访问我们部署的网站。
之前运行一个镜像,需要添加大量的参数。
可以使用Docker-Compose编写这些参数。
Docker-Compose可以帮助我们批量管理容器。
只需要通过一个docker-compose.yml文件去维护即可
#1.去github官网搜索docker-compose,下载1.24.1版本的Docker-Compose(下载较慢)
https://github.com/docker/compose/releases/download/1.24.1/docker-compose-Linux-x86_64
#建议使用wget直接下载到linux中
#2.将下载好的docker-compose-Linux-x86_64文件修改名称,同时给予文件可执行权限
mv docker-compose-Linux-x86_64 docker-compose
chmod 777 docker-compose
#3.为了方便后续使用,配置一个环境变量
#这里我将docker-compose移动到了/usr/local/bin中,同时修改文件/etc/profiel文件,将/usr/local/bin配置到$PATH中
mv docker-compose /usr/local/bin
vim /etc/profile
export PATH=/usr/local/bin:$PATH
source /etc/profile
#5.测试一下
在任意目录下测试输入docker-compose,可执行成功说明已经生效
yml文件以key:value方式来指定配置信息
多个配置信息以换行+缩进的方式来区别
在docker-compose.yml文件中,不要使用制表符,无法识别,全部都是空格
以下内容MySQL仅用来测试
version: "3.1"
services:
mysql: #服务的名称,自定义
restart: always #只要docker启动,那么这个容器就跟着一起启动
image: daocloud.io/library/mysql:5.7.4 #指定镜像路径
container_name: mysql #指定容器名称
ports:
- 3306:3306 #指定端口号的映射
- 7000:7000 #可以指定多个,这里不需要
environment:
MYSQL_ROOT_PASSWORD: root #指定MySQL的ROOT用户登录密码
TZ: Asia/Shanghai #指定时区
volumes:
- /docker_nginx_mysql/mysql/data:/var/lib/mysql #映射数据卷
nginx:
restart: always
image: daocloud.io/library/nginx:1.13.1
container_name: nginx
ports:
- 8080:80
environment:
TZ: Asia/Shanghai
volumes:
- /docker_nginx_mysql/nginx/:/usr/share/nginx/html
在使用docker-compose的命令时,默认会在当前目录下找docker-compose.yml文件
#1. 基于docker-compose.yml启动管理的容器,将6.2的yml内容复制到/docker_nginx_mysql/docker-compose.yml文件中,同时在目录下进行启动
docker-compose up -d
#2. 关闭并删除容器
docker-compose down
#3. 开启|关闭|重启已经存在的有docker-compose维护的容器
docker-compose start|stop|restart
#4. 查看由docker-compose管理的容器
docker-compose ps
#5. 查看日志
docker-compose logs -f
使用docker-compose.yml文件以及Dockerfile文件在生成自定义镜像的同时启动当前镜像,并且由docker-compose去管理容器
需要注意的地方是指定文件路径时的目录设置,我的文件目录为.image_hexo/hexo和.image_hexo/Dockerfile,docker-compose.yml放在.image_hexo/docker-compose/下
docker-compose.yml
#yml文件
version: '3.1'
services:
hexo:
restart: always
build: #构建自定义镜像
context: ../ #指定dockerfile文件的所在路径,相对路径
dockerfile: Dockerfile #指定Dockerfile文件名称
image: c246cd3dd41d
container_name: hexo
ports:
8081:80
environment:
TZ: Asia/Shanghai
Dockerfile文件
from from daocloud.io/library/nginx:1.13.1
copy hexo/. /usr/share/nginx/html/
#可以直接启动给予docker-compose.yml以及Dockerfile文件构建的自定义镜像
docker-compose up -d
#如果自定义镜像不存在,会自动帮助我们构建出自定义镜像,如果自定义镜像已经存在,会直接运行这个自定义镜像
#如果自定义镜像存在,需要重新构建的话,可以使用以下命令
#重新构建自定义镜像
docker-compose build
#运行前重新构建
docker-compose up -d --build
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。