简单入门docker与docker-compose

参考链接:bilibili-🐳Docker概念,工作流和实践 – 入门必懂

docker是一个使用容器技术跨平台一键部署服务的工具,容器在一开始就把全部的配置文件都准备好,开箱即用,不需要考虑任何依赖项的问题,因为里面包含了启动服务的最少依赖项,或者叫满足容器服务的最小的操作系统。

一、容器与镜像

什么是docker容器?什么又是docker镜像?这两个有什么区别?

举个栗子🌰:镜像可以相当于开发者已经打包好的安装包,用户只要点击安装即可完成软件的安装,则安装好的那个软件就是叫做容器了。容器是可运行的docker“程序”。

二、docker与虚拟机的区别

看到这里,想必大家会把容器技术和虚拟化技术作类比。那docker和虚拟机有什么区别呢?

docker使用的是相对隔离的环境,大部分配置都是在docker内的容器设置的,但是容器和主机则是有部分联系的,如卷和网络,并且多个容器之间可以配置是否可以互相访问,有利于数据共享。这样做的好处即可让部分数据于主机交互,又可以保障容器内部的破坏不能直接影响到主机。

虚拟机使用的是绝对隔离的环境,通过虚拟化技术虚拟出硬件,虚拟机和物理机没人任何的数据共享。

docker是与物理机公用同一个内核,但是它不能直接访问物理机内核,而是通过docker引擎访问,这样做的好处就是优化容器内部的性能

虚拟机是在一开始就分配好了资源大小,无论虚拟机内部是否够用,也不能增添性能;而docker则是用多少取多少,是弹性资源分配,这样做的好处就是能够减少资源的浪费和开销。

docker容器可以设定让容器内部指定数据挂载到外部主机的文件夹,这样做的好处就是即使将整个容器被摧毁,也能保留配置文件,下次直接创建新的容器即可使用指定的配置文件。

三、添加国内镜像源

因为docker官方的镜像仓库是在国外的,在国内因为不可抗力因素通常访问速度很慢或者无法访问,此时就需要使用国内docker镜像源来加快docker仓库的访问速度,要么就使用科学上网来解决这个问题。

使用ssh连接到iStoreOS的后台,输入vi /etc/docker/daemon.json编辑文件(默认没有则会自动创建),

添加如下配置:

{
    registry-mirrors:[
      #镜像源失效了的话需要更改下面的链接
      https://docker.m.daocloud.io
    ]
}

按Esc后输入:wq保存,重启docker服务/etc/init.d/dockerd restart即可生效

四、docker常用命令

参考文章:Docker容器常用操作命令详解

菜鸟教程-Docker 命令大全

docker pull 镜像名
docker images
docker ps
docker ps -a 可以显示全部容器,包括未运行的容器
docker run [参数] 镜像名
开头
-d: 后台运行容器并返回容器 ID。
-it: 交互式运行容器,分配一个伪终端。
--name: 给容器指定一个名称。
-p: 端口映射,格式为 主机端口:容器内部端口。
-v: 挂载卷,格式为 主机目录:容器内部目录。
--rm: 容器停止后自动删除容器。
--env  -e: 设置环境变量。
--network: 指定容器的网络模式,通常为--network host。
--restart: 容器的重启策略(如 no、on-failure、always、unless-stopped)。
-u: 指定用户。
#先用docker ps查看容器
docker exec -it 容器名/id /bin/bash
docker [start|stop|restart] 容器名/id 
#先用docker images查看全部镜像
docker rmi c
#需要停止容器后才能删除
docker rm 容器名/id

-f 强制删除正在运行的容器

五、docker网络

参考链接:bilibili-【入门篇】Docker网络模式Linux – Bridge | Host | None

docker网络主要分为3种类别:桥接型Bridge,主机型Host,无网型None

当安装完成docker的时候我们的网络配置会多以来一个docker网络,这个网络就是内docker容器运行容器分配的一个内部私有网络(虚拟路由),一般是172.17.0.1/16。docker容器会默认使用这个docker的桥接网络来与互联网相连,相当于进行了一层NAT转换。

通常来说我们外部设备是无法使用docker网络直接访问docker容器的(docker本机除外),因为外部设备无法连接到docker网络(类似于NAT),因此要想外部设备能够访问到容器端口,需要将内部端口暴露出来(类似于端口映射),-p 外部端口:内部端口。

桥接型网络有个不好的地方就是每次都需要指定的端口暴露出来,假如说有一个容器需要用到开放多端口(如p2p),显然一个一个端口开放必然是非常麻烦的,这时候我们就需要用到host网络了。

Host网络就是docker主机自身的网络,容器不再使用docker网络,而且直接桥接到主机的实际网络,相当于容器变成的主机的一个应用(仅在linux下如此),这样做的优点就是不需要考虑暴露内部的多少端口,因为内部端口等于外部端口,但这样也带来一系列问题:

  • docker端口冲突:因为内部端口等于外部端口,这样的话导致主机的端口会有冲突,除非修改主机或者容器的开放端口,有时候你无法找到容器对应的配置,只能修改主机的服务端口,这样不利于管理。
  • 不安全的网络:因为开放过多的端口,并且容器内部可以直接访问主机的全部开放服务,从而导致网络安全方面的问题。

None网络比较简单,容器内部只有一个回环网络LOOPBACK,甚至连主机自身也不能同docker网络连接到该容器,只能使用docker exec -it 容器名/id /bin/bash进入容器内部。

六、docker-compose

当我们需要部署多个docker容器并且让其互相联通,一个一个容器部署的话是非常麻烦的,这时候使用docker-compose就可以一键部署多个容器了,

①文件:本地下载

Github链接:docker-compose-linux-x86_64

#直接从Github下载
wget https://github.com/docker/compose/releases/download/v2.29.1/docker-compose-linux-x86_64
#或者从作者自建网盘复制链接后下载
wget 复制的链接

②移动到/usr/bin/目录下

mv docker-compose-linux-x86_64* /usr/bin/docker-compose

③修改权限

chmod 775 /usr/bin/docker-compose

④查看docker-compose是否安装成功

docker-compose version

docker-compose使用的是配置文件生成容器,因此需要有一个docker-compose.yml文件

这里简单创建一个docker-compose构建nginx-proxy-manager-zh容器示例:

引用链接:Github-nginx-proxy-manager

#先创建文件夹
mkdir -p /data/nginx-proxy-manager-zh
#进入该文件夹
cd /data/nginx-proxy-manager-zh
#创建docker-compose.yml文件
vi docker-compose.yml

#粘贴官方的配置文件
services:
  app:
    image: 'docker.io/jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
    #开放端口
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
    #共享卷./data表示当前目录
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
      
#启动容器
docker-compose up  -d
docker run -d \
  --restart unless-stopped \
  -p 80:80 \
  -p 81:81 \
  -p 443:443 \
  -v ./data:/data \
  -v ./letsencrypt:/etc/letsencrypt \
  jc21/nginx-proxy-manager:latest

是不是docker-compose的更加简单明了呀?

这里只是简单使用了一下docker-compose,它的优势要在多容器同时部署的时候才能该体现出来。


暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇