分类 Docker 下的文章

【Docker的使用】

安装Docker:在Linux或Windows上安装Docker引擎,并验证安装是否成功。
创建和运行容器:通过Docker命令(如docker search、docker pull、docker create、docker start等)来搜索、拉取、创建和启动容器。
构建和发布镜像:使用Dockerfile来定义镜像的构建过程,并通过docker build命令来构建镜像。构建完成后,可以使用docker push命令将镜像发布到Docker Hub等镜像仓库供其他人使用。
Docker通过其强大的功能和灵活性,已经成为现代软件开发和运维中不可或缺的工具之一。

Docker在线安装
基本要求:Linux要求内核3.0以上、CentOS 需要是7版本的
1.使用uname命令验证-查看即可

uname -r

2.如果已经安装过Docker,先卸载已安装的Docker。
sudo yum remove docker \

              docker-client \
              docker-client-latest \
              docker-common \
              docker-latest \
              docker-latest-logrotate \
              docker-logrotate \
              docker-engine

3.安装yum工具包和存储驱动
yum install -y yum-utils
4.设置镜像的仓库
yum-config-manager \

--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

上述方法默认是从国外的,不推荐

推荐使用国内的,阿里云docker镜像

yum-config-manager \

--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

5.安装docker
注意 : docker-ce 社区版 而ee是企业版。这里我们使用社区版即可。
旧版本的Docker引擎包可能叫做: docker 、 docker-engine 。
新版本的Docker引擎包叫做: docker-ce

yum install docker-ce docker-ce-cli containerd.io

6.启动docker
systemctl start docker

7.安装成功后,可以使用版本查询命令:docker version 确认是否成功。

8.配置阿里云镜像加速
鉴于国内网络问题,后续拉取 Docker 镜像十分缓慢,我们可以需要配置加速器来解决这个问题。
登录阿里云->搜索 “ 容器镜像服务 ”->获取加速器地址
通过修改 daemon 配置文件 /etc/docker/daemon.json 来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxx.mirror.aliyuncs.com"]
}
EOF

重启 Docker

sudo systemctl daemon-reload
sudo systemctl restart docker

注意:阿里云的本人自己账号的镜像地址(需要自己注册有一个属于你自己的):https://xxxx.mirror.aliyuncs.com

9.验证配置是否成功
docker info

部署Docker容器
Docker安装和验证成功后,我么可以使用以下命令来部署一个简单的Docker容器,比如运行一个Nginx
服务器。

拉取Nginx镜像

docker pull nginx

运行Nginx容器

docker run -d -p 80:80 --name my-nginx nginx

Docker内网环境的离线安装
由于在很多情况下需要安装docker的虚拟机或服务器无法访问互联网,因此需要离线安装docker。
下载安装包
访问https://download.docker.com/linux/static/stable/选择合适的版本并下载
在下用的是:https://download.docker.com/linux/static/stable/x86_64/docker-20.10.6.tgz
在linux环境下,创建/root/setup/docker目录,然后拷贝下载好的资源到此目录(可通过MobaXterm工具直接上传到linux目录)
以下操作在拟安装的机器上进行

1、解压缩安装包
tar -zxvf docker-20.10.6.tgz
2、复制解压缩后的文件到指定文件夹
cp docker/* /usr/bin/
3、注册编辑docker服务
vim /etc/systemd/system/docker.service
4、复制下列内容到该文档中

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target

5、添加权限后启动
chmod +x /etc/systemd/system/docker.service

6、重新加载配置文件、和启动Docker
systemctl daemon-reload

启动Docker

systemctl start docker

8、设置开机自启
systemctl enable docker.service

9、验证是否安装成功
systemctl status docker
docker -v

命令自动补全
docker支持命令自动补全功能,当输入镜像名前几位时,可以按 tab 键自动补全镜像名称、tag等。

如果镜像中有ubuntu,查看输入ub按下tab是否可以补全

docker run ub
如果按下 tab 时没有自动补全,可以按以下步骤操作:

检查是否安装了 bash-completion (命令补全增强包)

检查有 /usr/share/bash-completion/bash_completion 这个文件

ls /usr/share/bash-completion/bash_completion
如果有 /usr/share/bash-completion 目录,但是没有 /usr/share/bash-completion/bash_completion 文件(centos6为 /etc/bash_completion 文件),则需要安装 bash-completion
yum -y install bash-completion

检查是否安装了docker的自动补全

检查/usr/share/bash-completion/completions文件夹下是否有docker开头的自动补全

docker安装完后会在该文件夹下生成自动补全文件docker

如果安装了docker-compose,则该文件夹下还会有 docker-compose文件

ll /usr/share/bash-completion/completions/docker*

如果已经安装了docker自动补全,使用 source 命令使其生效
source /usr/share/bash-completion/completions/docker

再次使用 tab 查看是否可以自动补全

如果镜像中有ubuntu,查看输入ub按下tab是否可以补全

docker run ub
如果有报错,且报错中提示 _get_comp_words_by_ref: command not found 。说明 bash-completion 的配置文件没有生效,需要 source 一下

对于centos7,bash-completion安装的是2.x版本,配置文件为/usr/share/bash-completion/bash_completion

source /usr/share/bash-completion/bash_completion

如果是centos6,自动安装的bash-completion最新版为1.x版本,配置文件为/etc/bash_completion

bash /etc/bash_completion

再次使用 tab 查看是否可以自动补全

我们在创建基础容器之后,进入容器,进行编辑配置文件的时候,需要使用rpm,但是会出现:bash: rpm: command not found

解决
使用如下命令安装:

apt-get update
apt-get install rpm

在docker中运行第三方服务时,通常需要绑定服务端口到本地主机。但使用 -p 参数进行的端口映射,会自动在iptables中建立规则,绕过firewalld,这对于端口级的黑白名单控制管理是很不利的,所以我们需要对iptables进行手动修改。
iptables --list
发现在Chain DOCKER下多出了一条
删除DOCKER链中的1号规则;如果待删除规则不位于第一行,则将数字改为对应行号
iptables -D DOCKER 1

此容器只接受来自地址123.345.456.567的连接请求
iptables -A DOCKER -s 123.345.456.567 -d 172.17.0.2 -p tcp --sport 81 -j ACCEPT
再次进行端口扫描,发现27017端口已经关闭,只有IP为123.234.345.456的主机能够连接。

还有一种更简单的方式。因为docker绕过防火墙的原理是修改了iptables,那不让它修改即可,此方法无需切换默认防火墙。

vim /etc/default/docker
#修改文件,此处设置等同于在创建容器时手动指定iptables=false参数
DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4 -iptables=false"

vim /etc/docker/daemon.json
{
"iptables": false
}
#此处对更改设置之前创建的容器也有效,编辑后需重启docker服务

Nginx Proxy Manager 简介
This project comes as a pre-built docker image that enables you to easily forward to your websites running at home or otherwise, including free SSL, without having to know too much about Nginx or Letsencrypt.
该项目是一个预先构建的docker映像,使您能够轻松地转发到在家中或其他位置运行的网站,包括免费的SSL,而无需过多地了解Nginx或Letsencrypt。

Nginx Proxy Manager 官网
https://nginxproxymanager.com/

安装 Nginx Proxy Manager

  1. 安装 Docker-compose
    curl -L https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-compose
    chmod +x /usr/local/bin/docker-compose

国内机器可以使用 Github 反代,下方反代并非小俊所有,不保证其稳定性!
curl -L https://ghproxy.com/https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-uname -s-uname -m -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

  1. 新建docker-compose.yml文件
    vi docker-compose.yml

然后输入以下配置内容

version: "3"
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      # These ports are in format <host-port>:<container-port>
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '81:81' # Admin Web Port
      # Add any other Stream port you want to expose
      # - '21:21' # FTP

    # Uncomment the next line if you uncomment anything in the section
    # environment:
      # Uncomment this if you want to change the location of 
      # the SQLite DB file within the container
      # DB_SQLITE_FILE: "/data/database.sqlite"

      # Uncomment this if IPv6 is not enabled on your host
      # DISABLE_IPV6: 'true'

    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

注意:docker-compose.yml 文件中 81 为暴露端口,如被占用,请自行更改替换,需要在腾讯云轻量应用服务器的后台防火墙开放相应端口!

  1. 启动容器
    输入以下命令后台启动容器

docker-compose up -d

输入以下命令确认所有容器都是up状态

docker-compose ps

至此,我们已经安装完成 Nginx Proxy Manager 啦!
浏览器访问您 ServerIP:81 即可访问!进入登录后即可享用 Nginx Proxy Manager 在线协作翻译平台啦!
Ps:需要在腾讯云轻量应用服务器的后台防火墙开放相应端口!默认需要开放 81 tcp 哦。

简单使用教程
默认账号密码:

Email: admin@example.com
Password: changeme
使用默认账号密码登录 Nginx Proxy Manager ,第一次登录会弹出编辑用户信息的窗口,你可以忽略,也可以进行修改。

然后紧接着会弹出修改密码的窗口,第一行输入旧密码,第二行第三行输入新密码,点击 Save 保存。
然后就可以正常使用啦!

配置反向代理
先把域名解析到服务器
进入 Nginx Proxy Manager ,点击 Hosts ,然后点击 Add Proxy Host

Domain Names:# 填写你想用在该程序的域名
Scheme:默认http # 一般不用改
Forward Hostname / IP:172.17.0.1 # 一般为 172.17.0.1 ,可能有所不一,请执行 ip addr 自行查找 docker0 网卡的内网IP!
Forward Port:40789 # 暴露端口
Websockets Support:开启!!!开启!!!开启!!!

然后我们可以为程序添加上SSL证书
Request a new SSL Certificate ,然后把 Force SSL 和 HTTP/2 Support 打开,修改一下 Email Address for Let’s Encrypt 的邮箱,然后 Save 即可。
你也可以不用 Let’s Encrypt 的证书,但这个程序记得部署SSL证书!

至此,我们已经部署完成 Plausible Analytics 了。浏览器访问你刚刚配置的域名即可访问啦,然后创建账号并初始化使用即可!

注意:

需要在服务器的后台防火墙开放相应端口!需要开放 80 tcp 、 443 tcp 与 81 tcp 哦,如果你不使用域名访问程序,则只需要开放 40789 tcp 。

更新apt索引

sudo apt-get update

安装Docker

sudo apt-get install docker.io

创建Docker网络

启动前端服务容器

配置反向代理

安装Nginx

sudo apt-get install nginx
接着,创建一个Nginx配置文件,例如/etc/nginx/sites-available/myproject,来配置反向代理:

server{
listen 80;
location /app1{
proxy_pass http://app1:80; #转发到app1容器
}
location /app2{
proxy_pass http://app2:80; #转发到app1容器
}
}

将配置文件链接到site-enabled目录并重启Nginx:

链接配置文件到sites-enabled

sudo ln -s /etc/nginx/site-available/myproject /etc/nginx/sites-enabled/

检查Nginx配置是否正确

sudo nginx -t

重启Nginx

sudo systemctl restart nginx