四时宝库

程序员的知识宝库

初始化docker运行环境(dockerfile mysql初始化脚本)



docker的国内镜像可用性经常让人走很多弯路。这里将限定特定的环境,将基本操作步骤和遇到的问题逐一呈现,减少后来者曲折。

环境

可以上网的工作电脑,操作系统为ubuntu 24.04版本,网卡接入本地局域网路由器,可连接internet,配置如下:

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 24.04.2 LTS
Release:        24.04
Codename:       noble

$ ifconfig
eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.2.111  netmask 255.255.255.0  broadcast 192.168.2.255
        inet6 240e:3b3:30c4:ff41:ca1f:66ff:fee1:26d3  prefixlen 64  scopeid 0x0<global>
        inet6 fe80::ca1f:66ff:fee1:26d3  prefixlen 64  scopeid 0x20<link>
        inet6 240e:3b3:30c4:ff41::1000  prefixlen 128  scopeid 0x0<global>
        ether c8:1f:66:e1:26:d3  txqueuelen 1000  (Ethernet)
        RX packets 2678113  bytes 1137360495 (1.1 GB)
        RX errors 0  dropped 69  overruns 0  frame 0
        TX packets 2482295  bytes 254375099 (254.3 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 43

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 414022  bytes 63168907 (63.1 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 414022  bytes 63168907 (63.1 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

$ ping -4 www.qq.com
PING www.qq.com (121.14.77.201) 56(84) bytes of data.
64 bytes from 121.14.77.201: icmp_seq=1 ttl=53 time=4.29 ms
64 bytes from 121.14.77.201: icmp_seq=2 ttl=53 time=4.27 ms

操作步骤

  1. 卸载旧版本docker,安装最新版本docker。
# 1. 卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc

# 2. 安装依赖
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release

# 3. 添加 Docker 官方 GPG 密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 4. 设置仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 5. 安装 Docker 引擎
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 6. 验证安装
sudo docker run hello-world

上述代码框,1-5都顺利执行,到6就卡住了。

$ sudo docker run helloworld
[sudo] password for gauss:
Unable to find image 'helloworld:latest' locally
docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded

Run 'docker run --help' for more information

原因也很简单,就是镜像源站不可访问。

$ ping registry-1.docker.io
PING registry-1.docker.io (2a03:2880:f11b:83:face:b00c:0:25de) 56 data bytes
^C
--- registry-1.docker.io ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2036ms

gauss@power-edge-r730:~$ ping -4 registry-1.docker.io
PING registry-1.docker.io (128.242.245.212) 56(84) bytes of data.

# ping 不通

然后参考一系列往上搜索和LLM获得的答案,只有这些,建议你使用国内镜像源。

$ cat /etc/docker/daemon.json
{
        "registry-mirrors": [
                "https://cr.console.aliyun.com",
                "https://mirrors.huaweicloud.com",
                "https://docker.m.daocloud.io"
        ],
        "bip":"192.168.20.1/24"
}
$ sudo systemctl daemon-reload
$sudo systemctl restart docker

但是没啥用。还是如此,即时看docker的日志,也弄不明白,你只以为配置没有生效。不断尝试后,只好通过命令检查这些源站是否真能用。

这些站点还真不能用curl
https://cr.console.aliyun.com/v2 . 但是万能的搜索、豆包、deepseek都还在推荐这些源站。不知道我这里是否个案。环境特殊,取法翻墙,废了好些功夫,才找到一个可用的。列在云服务器控制台里面。

但是如果你一定要通过helloworld来检查,还是失败的。这里可以下载redis,nginx,mysql等。

所以最后一步就换做拉取wordpress镜像吧。

# 6. 验证安装
$ sudo docker pull wordpress
Using default tag: latest
latest: Pulling from library/wordpress
5040bd298390: Pull complete
568dce68541a: Pull complete
......
cd04b95ebe9c: Pull complete
Digest: sha256:b900bc9ceff22ef1dee076c25a67b6d661f9f108b4347a5646e05a11fef9b866
Status: Downloaded newer image for wordpress:latest
docker.io/library/wordpress:latest
  1. 装好docker后,赋予docker权限,避免每次都sudo
# 将当前用户加入 docker 组
sudo usermod -aG docker $USER

# 退出当前会话重新登录(或重启)
newgrp docker  # 立即生效(或直接重启终端)
  1. 安装并启动nginx

这里使用docker-composer安装nginx并管理容器。首先创建nginx运行需要的配置文件、页面以及日志文件等,然后编辑yaml文件,通过docker-compose启动

gauss@power-edge-r730:~/soft/nginx$ tree
.
├── data
│   ├── conf
│   │   ├── default.conf
│   │   └── enger.aigrow.space.conf
│   ├── htdocs
│   │   └── index.html
│   └── log
│       ├── access.log
│       └── error.log
└── nginx.yaml

5 directories, 6 files
gauss@power-edge-r730:~/soft/nginx$ cat nginx.yaml
services:
  nginx:
    image: nginx:latest
    volumes:
      - "./data/log:/var/log/nginx"
      - "./data/conf:/etc/nginx/conf.d"
      - "./data/htdocs:/usr/share/nginx/html"

    restart: always
    ports:
      - "80:80"
      - "443:443"

gauss@power-edge-r730:~/soft/nginx$ docker-compose -f nginx.yaml up &
[1] 982942
[+] Running 2/2e-r730:~/soft/nginx$
  Network nginx_default    Created                                                                                                                           0.1s
  Container nginx-nginx-1  Created  
  1. 测试



gauss@power-edge-r730:~/soft/nginx$ curl 127.0.0.1
Hello, Nginx!gauss@power-edge-r730:~/soft/nginx$ curl enger.aigrow.space
this is a test page.
gauss@power-edge-r730:~/soft/nginx$

总结

国内找一个可靠的源站很重要,很多错误都在这里,一些错误信息并不明确。可考虑使用curl源站确认是否ok。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接