Docker安装使用

安装依赖包

sudo apt install apt-transport-https ca-certificates curl software-properties-common

添加 Docker GPG 密钥

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

加 Docker GPG 密钥的主要目的是用于验证从 Docker 官方站点下载的软件包的真实性和完整性。GPG(GNU Privacy Guard)是一个用于加密和签名数据的工具,通过使用密钥对,它确保软件包未被篡改,并且是由官方发布的。

安装 Docker 引擎

sudo apt install docker-ce docker-ce-cli containerd.io

设置稳定版 Docker 存储库

出现这个这个提示,可能是docker -ce 和 decker.io 没有安装成功

 Package 'docker-ce' has no installation candidate

可以执行 安装docker.io

sudo apt install docker.io

启动 Docker 服务

sudo systemctl start docker

设置 Docker 开机自启

sudo systemctl enable docker

验证 Docker 安装

docker --version

运行镜像

sudo docker run hello-world

执行这个命令,docker 就会去运行 hello-world 这个镜像,如果本地没有这个镜像,那么就回去镜像仓库拉起

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world

出现 **Hello from Docker!**表示这个镜像运行成功了

Hello from Docker!
This message shows that your installation appears to be working correctly.
镜像和容器的关系
Docker 镜像
  • 镜像是一个轻量级、独立、可执行的软件包,其中包含运行应用程序所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
  • 镜像是静态的,一旦构建完成,其内容不会改变。
Docker 容器
  • 容器是从 Docker 镜像创建的运行实例。容器包含了运行应用程序的所有组件,包括代码、运行时、系统工具、系统库和设置。
  • 容器是动态的,可以启动、停止、删除和移动。

镜像是类,容器就是类的实例对象

Docker 命令
  1. 容器创建

    docker run -d -p 8080:80 --name myweb nginx

    • -d: 后台运行容器。
    • -p: 将容器的端口映射到主机。
    • --name: 为容器指定一个名称。
    • -v: 将主机目录挂载到容器内。
  2. 容器启动

    docker start hello-world

  3. 容器停止

    docker stop hello-world

  4. 查看运行中的容器

    docker ps

  5. 查看所有容器(包括已停止的)

    docker ps -a

  6. 进入运行中的容器( hello-world )终端

    docker exec -it hello-world bash

  7. 删除 Docker 容器

    docker rmi -f myimage:tag

    -f 表示强制删除

  8. 查看本地 Docker 中的镜像列表

    docker images

  9. 删除 Docker 镜像

    docker rmi imageName

  10. 进入正在运行的容器

    docker exec -it container_id /bin/bash

实践,搭建docker mysql 服务
拉取MySQL镜像

sudo docker pull mysql:latest

创建并运行 MySQL 容器:

sudo docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 mysql:latest

这个命令创建了一个名为 mysql 的容器,指定了 MySQL 的根密码(123456),并将容器的 3306 端口映射到主机的 3306 端口

进入 MySQL 容器

sudo docker exec -it mysql-container bash

连接到 MySQL 服务

mysql -u root -p

本地mysql服务 和 容器mysql服务 版本

mysql --version (本地)
mysql Ver 8.0.35-0ubuntu0.22.04.1 for Linux on x86_64 ((Ubuntu))

sudo docker exec -it mysql bash(容器)
bash-4.4# mysql --version
mysql Ver 8.2.0 for Linux on x86_64 (MySQL Community Server - GPL)
bash-4.4#

查看mysql 服务状态

sudo systemctl status mysql

终止mysql 服务状态

sudo systemctl stop mysql

查看mysql 进程信息

ps aux | grep mysql

杀死mysql服务进程

sudo kill -g msyql-pid

请确保使用 kill -9,这是强制终止信号,可以强制结束进程

启动mysql容器

sudo docker start mysql-container

进入mysql 容器

sudo docker exec -it mysql /bin/bash

查看mysql 版本

mysql --version;

mysql  Ver 8.2.0 for Linux on x86_64 (MySQL Community Server - GPL)
发现mysql版本太高,Navicat 无法连接到mysql 服务
删除mysql 容器

docker rm mysql

删除镜像

docker rmi mysql

搞不定,重新把阿里云服务系统更新,从头开始

安装dokcer 之前要更新apt 的源,不然有问题

sudo apt-get update

查看MySQL 镜像的其他版本

docker search mysql

但是也看不出来哪个的MySQL 是什么版本的,随意找一个 percona

安装拉起镜像 percona

sudo docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 percona

  • 使用percona 镜像创建容器
  • root 密码 设置未 123456
  • 容器名称 mysql
  • 映射主机的3306端口和容器3360端口
修改身份验证插件,不然naviCat 连接不上

ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘123456’;
FLUSH PRIVILEGES;

这个语句的目的是将 ‘root’ 用户的身份验证插件更改为 mysql_native_password 并设置新密码为 ‘123456’。

ALTER USER 'root'@'localhost': 指定要更改的用户,这里是 ‘root’ 用户,且限制只能从 ‘localhost’ 连接。

IDENTIFIED WITH mysql_native_password: 指定使用 mysql_native_password 插件进行身份验证。MySQL 8.0 版本后,默认使用 caching_sha2_password 插件,但有时需要与旧版本的客户端兼容,因此可能需要切换回 mysql_native_password

BY '123456': 设置用户的新密码为 ‘123456’。

阿里云服务设置安全组,开放3306 端口
使用NaviCat 连接容器的msyql 服务
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐