标签: Docker

  • Debian 12 / Ubuntu 22.04 安装 Docker 以及 Docker Compose 图文教程

    Debian 12 / Ubuntu 22.04 安装 Docker 以及 Docker Compose 图文教程

    本文将指导如何在 Debian 12 和 Ubuntu 22.04 下安装 Docker 以及 Docker Compose。

    PS:本文同时适用于 Debian 11 以及 Ubuntu 20.04

    什么是 Docker?

    Docker 是一种容器化技术,可以在服务器上快速搭建容器并在不污染宿主机的情况下运行软件,而不再需要安装配置各种环境。开源 Docker 社区致力于改进这类技术,并免费提供给所有用户,使之获益。

    什么是 Docker Compose?

    传统模式下运维人员需要运行 docker run 来启动各种容器,一旦容器过多,就无法一次性记住所有的运行参数和命令,这时候我们可以使用 Docker Compose 来解决这个问题。

    Docker Compose 是一个用于在单个主机上定义和运行多个 Docker 容器的工具。它使用 YAML 文件来配置应用程序的服务,然后使用一个命令就可以创建并启动所有服务。使用 Docker Compose 可以大大简化 Docker 容器的管理和部署,特别是对于具有多个互相依赖的容器的复杂应用。

    使用官方源安装 Docker

    以下操作需要在 root 用户下完成,请使用 sudo -i 或 su root 切换到 root 用户进行操作。

    首先,安装一些必要的软件包:

    apt update
    apt upgrade -y
    apt install curl vim wget gnupg dpkg apt-transport-https lsb-release ca-certificates

    然后加入 Docker 的 GPG 公钥和 apt 源:

    Debian

    curl -sSL https://download.docker.com/linux/debian/gpg | gpg –dearmor > /usr/share/keyrings/docker-ce.gpg
    echo “deb [arch=$(dpkg –print-architecture) signed-by=/usr/share/keyrings/docker-ce.gpg] https://download.docker.com/linux/debian $(lsb_release -sc) stable” > /etc/apt/sources.list.d/docker.list

    Ubuntu

    curl -sSL https://download.docker.com/linux/debian/gpg | gpg --dearmor > /usr/share/keyrings/docker-ce.gpg
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-ce.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -sc) stable" > /etc/apt/sources.list.d/docker.list
    

    国内机器可以用清华 TUNA 的国内源:

    Debian

    curl -sS https://download.docker.com/linux/debian/gpg | gpg –dearmor > /usr/share/keyrings/docker-ce.gpg echo “deb [arch=$(dpkg –print-architecture) signed-by=/usr/share/keyrings/docker-ce.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/debian $(lsb_release -sc) stable” > /etc/apt/sources.list.d/docker.list

    Ubuntu

    curl -sS https://download.docker.com/linux/debian/gpg | gpg --dearmor > /usr/share/keyrings/docker-ce.gpg
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-ce.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu $(lsb_release -sc) stable" > /etc/apt/sources.list.d/docker.list
    

    然后更新系统后即可安装 Docker CE:

    apt update
    apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin

    此时可以使用 docker version 命令检查是否安装成功:

    root@debian ~ # docker version
    Client: Docker Engine - Community
     Version:           24.0.2
     API version:       1.43
     Go version:        go1.20.4
     Git commit:        cb74dfc
     Built:             Thu May 25 21:52:17 2023
     OS/Arch:           linux/amd64
     Context:           default
    Server: Docker Engine - Community
     Engine:
      Version:          24.0.2
      API version:      1.43 (minimum version 1.12)
      Go version:       go1.20.4
      Git commit:       659604f
      Built:            Thu May 25 21:52:17 2023
      OS/Arch:          linux/amd64
      Experimental:     true
     containerd:
      Version:          1.6.21
      GitCommit:        3dce8eb055cbb6872793272b4f20ed16117344f8
     runc:
      Version:          1.1.7
      GitCommit:        v1.1.7-0-g860f061
     docker-init:
      Version:          0.19.0
      GitCommit:        de40ad0

    如果需要某个特定用户可以用 Docker rootless 模式运行 Docker,那么可以把这个用户也加入 docker 组,比如我们把 www-data 用户加进去:

    apt install docker-ce-rootless-extras
    sudo usermod -aG docker www-data
    

    安装 Docker Compose

    因为我们已经安装了 docker-compose-plugin,所以 Docker 目前已经自带 docker compose 命令,基本上可以替代 docker-compose:

    root@debian ~ # docker compose version
    Docker Compose version v2.18.1
    

    如果某些镜像或命令不兼容,则我们还可以单独安装 Docker Compose:

    我们可以使用 Docker 官方发布的 Github 直接安装最新版本:

    curl -L https://github.com/docker/compose/releases/latest/download/docker-compose-Linux-x86_64 > /usr/local/bin/docker-compose
    chmod +x /usr/local/bin/docker-compose

    此时可以使用 docker-compose version 命令检查是否安装成功:

    root@debian ~ # docker-compose version
    Docker Compose version v2.18.1

    修改 Docker 配置

    以下配置会增加一段自定义内网 IPv6 地址,开启容器的 IPv6 功能,以及限制日志文件大小,防止 Docker 日志塞满硬盘 (泪的教训):

    cat > /etc/docker/daemon.json << EOF
    {
        "log-driver": "json-file",
        "log-opts": {
            "max-size": "20m",
            "max-file": "3"
        },
        "ipv6": true,
        "fixed-cidr-v6": "fd00:dead:beef:c0::/80",
        "experimental":true,
        "ip6tables":true
    }
    EOF
    

    然后重启 Docker 服务:

    systemctl restart docker

    好了,我们已经安装好了 Docker 和 Docker Compose,然后就可以开始愉快的安装各种软件,限于篇幅,我们不再赘述,今后慢慢介绍安装各种 Docker 软件的方法。

  • docker命令 – 管理应用容器引擎

    docker命令的功能是用于管理应用容器引擎,可以让开发者们打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何主流的Linux系统之上,也可以用于实现虚拟化。

    语法格式:docker [参数]

    常用参数:

    ps显示状态为运行(Up)的容器
    cp从容器里向外拷贝文件或目录
    kill发送信号给容器,默认SIGKILL

    参考实例

    关闭全部正在运行的容器:

    [root@jiloc ~]# docker kill $(docker ps -q) 

    删除已经停止的容器:

    [root@jiloc ~]# docker rm `docker ps -a -q` 

    登陆指定的容器系统中(con01):

    [root@jiloc ~]# docker exec -it con01 /bin/bash 

    停止指定的容器系统(con01):

    [root@jiloc ~]# docker stop con01

    启动指定的容器系统(con01):

    [root@jiloc ~]# docker start con01
  • 配置docker desktop的境像下载地址为国内镜像地址

    配置docker desktop的境像下载地址为国内镜像地址

    右键右下角 docker的托盘图标,依次打开  Setings >> Docker Engine,在Docker Engine里配置如下内容,

    {
      "registry-mirrors": [
        "https://registry.docker-cn.com",
        "http://hub-mirror.c.163.com",
        "https://docker.mirrors.ustc.edu.cn"
      ],
      "insecure-registries": [],
      "debug": true,
      "experimental": false
    }

    然后点击右边的”Apply & Restart” 按钮保存与重新docker。

    Docker中国区官方镜像地址: https://registry.docker-cn.com

    网易地址: http://hub-mirror.c.163.com
    中国科技大学地址: https://docker.mirrors.ustc.edu.cn

  • docker容器的备份和迁移

    docker容器的备份和迁移

    容器保存为镜像

    我们可以通过以下命令将容器保存为镜像

    docker commit laoji_nginx mynginx

    laoji_nginx是容器名称

    mynginx是新的镜像名称

    此镜像的内容就是你当前容器的内容,接下来你可以用此镜像再次运行新的容器

    镜像备份

    docker  save -o mynginx.tar mynginx

    -o 输出到的文件

    执行后,运行ls命令即可看到打成的tar包

    镜像恢复与迁移

    首先我们先删除掉mynginx镜像

    然后执行此命令进行恢复

    docker load -i mynginx.tar

    -i 输入的文件

    执行后再次查看镜像,可以看到镜像已经恢复

  • docker新建容器的时区设置默认8区 图文教程

    docker新建容器的时区设置默认8区 图文教程

    默认情况下我们新建的docker容器的时间都是0区的,而我们所在的时区为8区,所以这就会导致时间错误。

    # 运行一个nginx服务器
    docker run -d -p 80:80 --name nginx nginx
    # 进入容器shell
    docker exec -it nginx /bin/bash
    # 查看时区
    date -R
    # 退出容器
    exit

    将容器内时区修改为8区

    # 停止容器
    docker stop nginx
    # 删除容器
    docker rm nginx
    # 创建并运行容器,通过 -e TZ="Asia/Shanghai" 设置时区
    docker run -e TZ="Asia/Shanghai" -d -p 80:80 --name nginx nginx
    # 进入容器shell
    docker exec -it nginx /bin/bash
    # 查看时区
    date -R
  • Windows10 Docker Mariadb InnoDB: Write to file ./ibdata1 failed

    Windows10 Docker Mariadb InnoDB: Write to file ./ibdata1 failed

    错误描述

    通过容器日志查到错误信息如下:

    2020-01-05 13:06:14 0 [Warning] InnoDB: Retry attempts for writing partial data failed.

    2020-01-05 13:06:14 0 [ERROR] InnoDB: Write to file ./ibdata1 failed at offset 0, 1048576 bytes should have been written, only 0 were written. Operating system error number 22. Check that your OS and file system support files of this size. Check also that the disk is not full or a disk quota exceeded.

    2020-01-05 13:06:14 0 [ERROR] InnoDB: Error number 22 means ‘Invalid argument’

    2020-01-05 13:06:14 0 [ERROR] InnoDB: Could not set the file size of ‘./ibdata1’. Probably out of disk space

    2020-01-05 13:06:14 0 [ERROR] InnoDB: Database creation was aborted with error Generic error. You may need to delete the ibdata1 file before trying to start up again.

    2020-01-05 13:06:15 0 [ERROR] Plugin ‘InnoDB’ init function returned error.

    2020-01-05 13:06:15 0 [ERROR] Plugin ‘InnoDB’ registration as a STORAGE ENGINE failed.

    2020-01-05 13:06:15 0 [ERROR] Unknown/unsupported storage engine: InnoDB

    2020-01-05 13:06:15 0 [ERROR] Aborting

    windows10 + Docker 安装 mariadb 时,一安装老是出现以上错误。创建命令如下:

    docker run -d -p 3307 --name jmysql -v D:\MysqlData\:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=jjjjjj mariadb

    解决办法

    使用以下命令进行创建

    docker run -d -p 3307:3306 --name jmysql -v D:\MysqlData\:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=jjjjjj mariadb --innodb-flush-method=fsync

    创建时需要添加:

    –innodb-flush-method=fsync

    注:重新创建时需要将 d:\MysqlData 目录清空并重新建立容器。

  • Python机房流量调度系统 环境配置

    Python机房流量调度系统 环境配置

    前面我们写了Python3 机房间流量调度系统,下面我们记录一下安装环境配置。

    升级Linux系统下的Python版本

    CentOS上安装配置Python3.7 编译安装图文教程

    安装docker

    yum install docker git screen -y
    systemctl start docker.service
    mkdir -p /data/mysqlData

    配置docker mysql

    docker run -d -p 3307:3306 -v /data/mysqlData/:/var/lib/mysql --privileged=true --name jmysql -e MYSQL_ROOT_PASSWORD='laoji.org' mysql 

    进入mysql容器,配置mysql密码

    docker exec -it jmysql /bin/bash
    mysql -uroot -p
    use mysql;
    alter user 'root'@'%' identified with mysql_native_password by 'laoji.org';
    \q
    exit 

    后面导入数据等不再详细说明。

  • linux下 设置 uwsgi 开机自启动

    linux下 设置 uwsgi 开机自启动

    前面我们写了Docker 下使用Centos系统镜像安装 uwsgi 运行 Python3 Django,但是重启docker以后容器中的uwsgi不能自动启动,所以我们这里来讲解一下如何另 uwsgi 开机自启动。

    终端进入Linux启动文件夹

    cd /etc/init.d

    在/etc/init.d/ 文件夹下创建一个shell脚本名为 uwsgi.sh 添加如下内容 :

    #!/bin/bash -e
    /usr/bin/uwsgi --ini /data/wwwroot/traffic_scheduling/web/uwsgi.ini

    修改uwsgi.sh的文件权限

    chmod 755 uwsgi.sh

    添加到开机自动启动

    update-rc.d uwsgi.sh defaults 99
  • 如何在Docker容器中安装 apache php7.3配置环境?

    如何在Docker容器中安装 apache php7.3配置环境?

    前面我们写了 公司OA项目服务器配置注意点 ,迫于公司的系统只有现成apache的rewirte规则,而且我对apache并不熟而且使用得很少,所以这里我们记录一下如何在Docker容器中配置apache+php7.3的环境,废话不多说直接看配置。

    在powershell终端中部署容器

    docker run -d -p 8081:80 --name japache --link jmysql -v D:\wwwroot:/data/wwwroot -v D:\DockerConfig\apache2\sites-enabled\:/etc/apache2/sites-enabled/ --restart=always php:7.3-apache

    网站文件跟目录在 D:\wwwroot

    请注意容器与主机之间映射文件的对应关系。

    进入Docker容器

    docker exec -it japache /bin/bash

    在容器中安装php扩展mysqli,启用rewrite功能

    docker-php-ext-install mysqli
    a2enmod rewrite

    配置apache文件

    在 D:\DockerConfig\apache2\sites-enabled\ 目录下配置一个名为 poweridc.conf 的文件,内容如下:

    <VirtualHost *:80>
    	ServerName poweridc
    	ServerAdmin webmaster@localhost
    	DocumentRoot /data/wwwroot/POWER_IDC
    	<Directory /data/wwwroot/POWER_IDC>
    		Options Indexes FollowSymLinks
    		AllowOverride All
    		Require all granted
    	</Directory>
    	RewriteEngine on
    	RewriteCond %{REQUEST_METHOD} ^TRACE
    	RewriteRule .* - [F]
    	RewriteRule !(^/static|\.(gif|swf|exe|png|jpg|js|css)$) /index.php [L]
    	ErrorLog ${APACHE_LOG_DIR}/error.log
    	CustomLog ${APACHE_LOG_DIR}/access.log combined
    </VirtualHost>

    修改hosts(可选)

    Linux Windows MacOS 等系统中hosts的原理及作用

    浏览器访问

  • Kubernetes WEB UI Dashboard 部署 MySQL/Mariadb容器

    Kubernetes WEB UI Dashboard 部署 MySQL/Mariadb容器

    问题描述

    我们在使用Kubernetes的Dashboard部署mysql/mariadb时出现了错误(Docker Desktop for Mac/Windows开启Kubernetes 及安装注意事项):Back-off restarting failed container 错误 。

    这个错误主要是由于MySQL部署时需要设置 MYSQL_ROOT_PASSWORD 参数,但是我们这里不是时没有设置。

    Docker安装Mariadb数据库 设置root密码 图文教程

    解决方案

    在”显示高级选项”里可以找到”环境变量”设置,这里做好配置然后部署即可。

  • Docker Desktop for Mac/Windows开启Kubernetes 及安装注意事项

    Docker Desktop for Mac/Windows开启Kubernetes 及安装注意事项

    老季晚上性质很高,由于之前玩了一段时间的Docker,所以想了解一下Kubernete WEB UI。但是由于国内无法下载到Kubernete的文件,所以即使再Docker Desktop里点了Kubernete也是一直显示”Kubernete is starting”状态。

    解决方案

    注意:Docker Desktop安装的Kubernete版本必须跟下载的git分支版本对应。否则会在 C:\ProgramData\DockerDesktop\service.txt 出现 "Cannot list nodes: Get https://kubernetes.docker.internal:6443/api/v1/nodes: EOF" 错误。

    https://github.com/AliyunContainerService/k8s-for-docker-desktop

    感谢阿里云的大佬,为我们提供了解决方案。

    注意事项

    Choose Kubeconfig File

    在这一步时,由于我们这边是MacOS,点击到选择文件时,根据阿里大佬给的方案使用 Mac: $HOME/.kube/config ,但是MacOS里无法选择到隐藏文件。这里我们给个小方法,使用终端命令行给配置文件加个小链接

    ls -s ~/.kube/config kube.config

    这样选择的时候直接选择到软链接即可。

    kubernetes dashboard 无法登录提示Not enough data to create auth info structure.

    虽然我们上面创建了快捷方式,但是这里并没有设置token,会报错。

    1、生成 token

    kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')

    这里就是我们所需要的 token 了

    2、配置kube的config文件

    vi ~/.kube/config

    将刚才生成的token: 放在最后。( token: 后面有个空格 ,不然会报:错误)

        token: eyJhbGciOiJSUzI1NiIsImtpZCI6IiJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJ0dGwtY29udHJvbGxlci10b2tlbi1rdjlqNiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJ0dGwtY29udHJvbGxlciIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50LnVpZCI6ImU5NGZhNzBjLWUyYjMtMTFlOS1hODEwLTAyNTAwMDAwMDAwMSIsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDprdWJlLXN5c3RlbTp0dGwtY29udHJvbGxlciJ9.q8g6S4OoF9ESJgWIdgjpjUeMc65xAAGZlK1YlpxuFIUwBFsIsc3PyjWf4Zo25iZguQljjZkIvbMfhB0Lv_yi6va2HoTSREk_qTvyvYJ0a5N7-MDrTCvY0S061jI42J9ply0CGFS_ZXcCrJzuUEEPtfpoQmvyrBfgSf65V6MZSmjHjBKSl2Jmkg0gUhtlonKU0tGNwiM6WkeS8K-A9Rw7XG_rRuwUFN4kwrB8fPIy2dmNVbO2ND9B-9B1lCig-Po9auFczDXggRzVeNqBfRBum9hq4CJ7BK-YyWzHXrWPR8nOMC8il37cD7FhQhRrs74-rSg8t6PjWZ0TALNrmwXOdQ

    至此简单的Kubernetes Dashboard安装完成。

    如何查看在Kubernetes是否安装成功?

    可以在终端里查看已部署的容器。

    kubectl get pods
    kubectl get deployments
  • Docker Windows 版本拉取镜像错误 no matching manifest

    Docker Windows 版本拉取镜像错误 no matching manifest

    问题描述

    在 docker 拉取镜像时出现错误

    > docker pull mysql
    Unable to find image ‘mysql:latest’ locally
    latest: Pulling from library/mysql
    C:\Program Files\Docker\Docker\Resources\bin\docker.exe: no matching manifest for windows/amd64 10.0.18362 in the manifest list entries.

    windows 10 x64安装版本需要开启Hyper-V

    Docker镜像拉取错误码:

    docker pull mysql

    Pulling from library/mysql
    no matching manifest for unknown in the manifest list entries

    解决方法:

    将 experimental 设置为 true 即可.

WeChat
↑