专栏首页最肯忘却Docker简单入门
原创

Docker简单入门

Docker总览

以下所有学习均使用腾讯云官方镜像Centos7.8,安装后无任何额外安装。***.com域名解析为我服务器的ip,后续不进行解释。

一、Docker基本操作

1.1安装docker

#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的镜像生成容器,默认从国外网站的
image.png

1.2Docker设置中央仓库

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.3镜像的相关操作

#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.4容器的相关操作

#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

二、Docker应用

2.1准备nginx容器

#使用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
image.png

2.2准备mysql容器

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.3数据卷

【数据卷】将宿主机中一个目录映射到容器的目录当中。

为了部署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自定义镜像

中央仓库上的镜像,也是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:设置内存最大值
image.png

使用自定义创建后,可直接访问我们部署的网站。

image.png

四、Docker-Compose

之前运行一个镜像,需要添加大量的参数。

可以使用Docker-Compose编写这些参数。

Docker-Compose可以帮助我们批量管理容器。

只需要通过一个docker-compose.yml文件去维护即可

4.1下载Docker-Compose

#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,可执行成功说明已经生效
image.png

4.2Docker-Compose管理Nginx容器

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

4.3使用docker-compose命令管理容器

在使用docker-compose的命令时,默认会在当前目录下找docker-compose.yml文件

#1. 基于docker-compose.yml启动管理的容器,将6.2的yml内容复制到/docker_nginx_mysql/docker-compose.yml文件中,同时在目录下进行启动
docker-compose up -d
image.png
#2. 关闭并删除容器
docker-compose down
#3. 开启|关闭|重启已经存在的有docker-compose维护的容器
docker-compose start|stop|restart
#4. 查看由docker-compose管理的容器
docker-compose ps
#5. 查看日志
docker-compose logs -f

4.4 docker-compose配置Dockerfile使用

使用docker-compose.yml文件以及Dockerfile文件在生成自定义镜像的同时启动当前镜像,并且由docker-compose去管理容器

需要注意的地方是指定文件路径时的目录设置,我的文件目录为.image_hexo/hexo和.image_hexo/Dockerfile,docker-compose.yml放在.image_hexo/docker-compose/下

image.png

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

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • CDN日志过滤方法

    CDN日志往往记录较大,单纯使用grep和cat无法彻底进行统计分析,这种情况下可以使用zcat和awk来进行

    古人诗
  • nginx代理Websocket

    有需求使用nginx反向代理websockt,因为webSocket协议是基于http协议的,因此可以使用nginx反向代理webSocket.

    古人诗
  • CVM数据备份(快照+镜像)

    我们在提交工单咨询腾讯云工程师进行服务器问题处理时,总会让我们备份数据,但有些人对镜像或者快照的数据备份步骤不是很清楚,此文档会对相关步骤进行详细说明:

    古人诗
  • docker扫盲,面试连这都不会就等着挂吧!

    Docker要求运行在Centos 7上,要求系统为64位,系统内核版本3.10以上

    程序员内点事
  • docker入门篇

    docker pull centos       # 从docker仓库下载一个镜像例如:docker pull centos:6.7

    二狗不要跑
  • 试用docker功能

    jeremyxu
  • Docker基础与实战,看这一篇就够了

    Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Uni...

    JAVA日知录
  • Docker基础与实战,看这一篇就够了

    Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Uni...

    田维常
  • Docker安装Nginx

    参考https://www.runoob.com/docker/docker-install-nginx.html

    别先生
  • docker基本命令和基本操作命令

    1.dockerfile:把需要什么系统,需要装什么软件,需要怎么配置环境等等全部都写进Dockerfile里面,相当于是一个基于docker的全自动生成镜像的...

    AI之禅

扫码关注云+社区

领取腾讯云代金券