基于没有图形化界面,纯命令行的环境操作,根据官方文档手搓。日常还是喜欢用桌面或者portainer偷懒的,已经到了连几个单词都不想敲键盘的地步了...
安装docker
先随手`docker`一下看看系统有没有自带,如果没有也可以试试现有源里有没有已经提供的
如果使用官方的,官方给出了三种方法,一个是配置repo源下载安装,一个是到官网下载包手动安装,还有一个是使用脚本自动检测环境安装
主流系统源如下表
Ubuntu https://download.docker.com/linux/ubuntu/gpg Debian https://download.docker.com/linux/debian/gpg RHEL https://download.docker.com/linux/rhel/docker-ce.repo Fedora https://download.docker.com/linux/fedora/docker-ce.repo CentOS https://download.docker.com/linux/centos/docker-ce.repo 拉取镜像
一般都是只拉取一个镜像,如果要拉取全部使用-alatest 最后的latest都是项目默认版本,也可自己手动指定
docker pull 注册表(留空使用默认仓库)/ibrary/hello-world:版本号
运行容器
项目在部署时可以直接按run的形式配置,docker会自动从仓库pull
docker run -p 容器内端口:主机实际端口 -v 宿主机目录:容器目录:可读性 --network --name 显示名称 项目名称:版本号(留空为lastest)
映射端口可以用-p多次绑定,不限于用一次
推荐使用-v 挂载主机目录,所有文件数据都会存在宿主机中,而不会随着容器变化而被销毁,同时还能自由的查看删改数据文件。如果实际目录不存在,docker会自行创建目录
配置”网卡“使用--network,用空格隔开,一次可写多个
镜像仓库与docker代理加速
daemon是docker的守护进程,配置文件位于/etc/docker/daemon.json,registry-mirrors配置镜像仓库,proxies配置docker所使用的代理
{ "registry-mirrors": [ "https://docker.1ms.run", "https://docker.m.daocloud.io", "https://docker.1panel.dev", "https://registry.dockermirror.com" ], "proxies": { "http-proxy": "http://代理服务器ip和端口号", "https-proxy": "https://代理服务器ip和端口号", "no-proxy": "localhost,127.0.0.1" } }也可以将代理配置写在/etc/systemd/system/docker.service.d/http-proxy.conf中,作为一个服务运行。文件中代理的特殊字符(例如#?!()[]{}逗号)必须使用双百分号进行转义%%
[Service] Environment="HTTP_PROXY=http://proxy.example.com:3128" Environment="HTTPS_PROXY=https://proxy.example.com:3129" Environment="NO_PROXY=localhost,127.0.0.1"
无论什么方式配置完成后,要重启一遍,并检查环境是否生效
sudo systemctl daemon-reload sudo systemctl restart docker sudo systemctl show --property=Environment docker
配置网络
容器执行指令/进入容器内的操作
attach与exec的比较
attach直接在主进程上实时操作调试,exec是新开了一个进程运行,比起attach,exec要更加安全灵活
直接使用exec就能执行单条指令
docker exec 项目名称 指令
docker exec -it 项目名称 -u 登入用户名 /bin/bash
-i选项保持标准输入打开,-t选项分配一个伪终端设备,这样就提供了一个交互式shell。而shell只有/bin/bash,/bin/sh
有些极简容器可能都没有shell,实在需要可以通过运行单行指令的形式像正常操作系统那样一步步安装,但是这样操作会修改容器,需要重新构建容器
portainer配置对docker映射
以Ubuntu为例的apt配置源的方式,
# Add Docker's official GPG key: sudo apt update sudo apt install ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc# Add the repository to Apt sources: sudo tee /etc/apt/sources.list.d/docker.sources <<EOF Types: deb URIs: https://download.docker.com/linux/ubuntu Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") Components: stable Architectures: $(dpkg --print-architecture) Signed-By: /etc/apt/keyrings/docker.asc EOF
sudo apt update
以CentOS为例的dnf配置方式
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
配置后安装
docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
同时配置一下服务自动启动
sudo systemctl enable --now docker
使用脚本会自动识别当前的Linux系统发行版,并配置好包管理器自动安装,但可能不是最新的版本
先下载脚本随后运行
curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh
docker中存在四种网络模式
| bridge模式 | --net=bridge 桥接模式(默认设置,自己创建也使用bridge 模式) |
| host模式 | --net=host 和宿主即共享网络 |
| container模式 | --net=container:NAME_or_ID 容器网络连通!(很少用,局限性很大!) |
| none模式 | --net=none 不配置网络 |
docker network create
--driver bridge
--subnet=172.25.0.0/16 子网 --gateway=172.25.0.1 网关 --ip-range=172.25.50.0/24 分配地址范围 --aux-address="my-router=172.25.50.10"
my-custom-network 网络名称
docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v /dockerData/portainer:/data --restart=always --name portainer portainer/portainer-ce:latest -v /var/run/docker.sock:/var/run/docker.sock
指令已经映射完成docker,可以在安装完成后即时运行如果失效,仍然可以按照指示使用agent安装,只不过是需要使用一个docker容器