跳转至

00.docker的安装以及基本配置使用

Docker安装

软件安装

根据官网一步步走下来就可以了

Install Docker Engine on Ubuntu | Docker Docs

这里记录在ubuntu上的安装流程

首先删除所有和docker冲突的包

for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

设置docker的APT库

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get 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:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

安装docker的最新版本

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

检测docker是否安装成功

sudo docker run hello-world

安装完成后查看安装是否成功

docker --version

软件卸载

卸载docker

sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras

删除相关的配置文件

sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

添加国内镜像库

因为国内访问dockerhub会比较慢,所以我们使用国内的镜像源,这里添加阿里的镜像文件库

进入阿里云容器镜像服务,注册进入后,点开左边的镜像工具->镜像加速器,然后在右边就会出现怎么添加服务的内容了

这里展示ubuntu用户的方案,这个镜像链接好像每个人的都不一样,可以用自己的,可能会快点吧。

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://rodeah1w.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

有时候这个也不能用,可以关注国内镜像源

https://xuanyuan.me/blog/archives/1154?from=tencent

docker常用查看命令

docker使用建议在root模式下,会方便很多,以下命令全是在root模式下执行

如果不想使用sudo的话,可以运行以下命令将当前用户添加到docker组中:

sudo usermod -aG docker $USER

注销并重新登录,或者运行以下命令使更改生效:

sudo service docker restart
newgrp docker

确保用户已经成功添加到 docker 组。可以使用以下命令检查:

id lqh #  id后面是用户名

查看正在运行的容器

docker ps

查看已经下载过的镜像

docker images

docker网络配置

docker一般会有三个网络,docker0,host,null,可以通过以下命令查看

docker network ls

我们一般会自己添加一个网络,然后让自己的有关联的服务连接到这一个网络上,这样就可以实现容器以容器名为地址的端口访问,当然也可以直接使用IP地址访问,但是可能IP地址会变,但是使用网络名的话,就不会改变。

  • 在自定义网络中,可以给容器起多个别名,默认的别名是容器名本身
  • 在同一个自定义网络中的容器,可以通过别名互相访问

添加一个自己的网络

docker network create 网络名

查看现有网络

docker network ls

我这个系类的笔记,如果没有特别说明,都是基于一个网络

lqh_net

Docker启动容器

docker启动容器一般有两种方式,一种是直接命令行docker run 镜像名,还有一种是建立docker-compose.yml文件然后使用docker-compose up -d执行文件中的相关配置

docker run

这里以一个mysql的安装为例

docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  mysql

上面的参数含义 --name是容器名 -p是容器和宿主机端口映射 -e是环境变量 还有一些其他的参数,暂时不做细讲

docker-compose使用

在建立的保存相应应用数据的文件夹下面建立docker-compose.yml文件

执行命令

docker-compose up -d

如果没有该命令,应该会提示安装

apt-get insatll docker-compose

这样安装的版本好像是1.24还是多少的,如果要下载最新的,如下操作

sudo curl -L https://github.com/docker/compose/releases/download/v2.21.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version

当然,这样下载是需要能访问github的,如果访问不了,可以想办法下载到这个二进制文件docker-compose-linux-x86_64,然后复制到/usr/local/bin/下,然后将该二进制文件改名为docker-compose,再给他赋予权限

这里也以一个mysql的安装为例,我们先在想要存储mysql数据库的位置新建一个文件

# Use root/example as user/password credentials
version: '3.1'

services:
  db:
    container_name: mysql
    image: mysql
    # NOTE: use of "mysql_native_password" is not recommended: https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password
    # (this is just an example, not intended to be a production configuration)
    command: 
        --max_connections=1000
        --character-set-server=utf8mb4
        --collation-server=utf8mb4_general_ci
        # --default-authentication-plugin=mysql_native_password
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: lqhlqh
      TZ: Asia/Shanghai
    volumes:
        - ./data:/var/lib/mysql 
        - ./init:/docker-entrypoint-initdb.d 
        - ./conf:/etc/mysql/conf.d 
    networks:
        - my_net
    ports:
        - 3306:3306

networks:
    my_net:
        name: lqh_net

上面的参数,container_name就是容器名,image是镜像名,command感觉像一些初始化,environment是环境变量,volumes是宿主机存储位置和Docker容器中位置的映射,networks是网络名,ports是端口映射

docker导出和导入

docker images

查看要导出的ID

然后

docker save b6ebde5f6e8e > /home/data/cpolar/cpolar.tar 

这样后,就导出了

下面导入

docker load < cpolar.tar 

没有TAG和ID

docker tag aba01f181a4a webconsole:latest