docker : 日常开发使用

376 阅读4分钟

docker : 日常开发使用

1. docker 是什么?

docker 是体现容器化思想的一款商业化产品,核心理念是“Build safer,share wider,run faster”。

个人理解,容器化指的是操作系统级别的虚拟化,每一个容器自己觉得”独立拥有“一个宿主机操作系统(其实是共享OS),执行环境彼此隔离,这样容器之间不会互相干扰。

2. docker解决了什么问题?[1]

没有容器思想之前,在服务器上部署应用程程序时,由于依赖的包或者运行时环境不一致,导致部署多个应用程序时容易冲突或者同一应用不同版本无法启动多个等。

解决上述问题的一个办法是使用虚拟机,但是虚拟机的资源消耗过大,维护成本较高。docker 是一个 根据操作系统提供的接口向上封装构建,制造出 应用程序的执行环境隔离的 应用。比虚拟机更轻量级。

k8s 是支持容器部署和扩展的自动化系统(自动化运维)。基本上 k8s 管理的就是 docker 容器,不知道未来会不会有其它容器化产品替代docker。

3. docker 核心三大组件[2]

  • 镜像(Image)

    docker最开始就基于linux系统构建的。因为 “linux一切皆文件”,所以docker镜像可以看成一系列文件或者说文件系统,这个镜像文件包含可执行应用程序和配置数据,可以运行但尚未运行。

    镜像的两个特征:分层和只读。分层指的是“叠积木”。只读指的是构建完成后,不会修改。修改也是在容器中增加或删除文件。

Untitled.png

  • 容器(Container)

    容器是一个具有自己网络和命名空间的进程。容器通过在镜像上面添加一层读写层来实现可读写。

Untitled 1.png

  • 仓库(hub)

    仓库是集中存储镜像的地方。docker hub是docker官方提供的仓库服务。

4. 使用 docker 部署 MySQL 服务

  1. 安装 docker

实验环境:WSL

官方安装文档:docs.docker.com/engine/inst…

推荐菜鸟教程安装:www.runoob.com/docker/ubun…

WSL1如何升级为WSL2: copyfuture.com/blogs-detai…

# 1. 查看版本是否支持 docker
lsb_release -a
No LSB modules are available. # 这个是因为没有安装 lsb 模块,apt-get install lsb-core可以解决
Distributor ID: Ubuntu 
Description:    Ubuntu 18.04.2 LTS
Release:        18.04
Codename:       bionic
# 2. 官方脚本自动化安装
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# (这里得docker可是脚本文件名(有没有大神可以解答一下这个东西为啥不是参数) --mirror是参数)
# 3. WSl 1 启动不了 docker 服务,升级为 WSL 2 即可
wsl -l -v
  NAME      STATE           VERSION
* Ubuntu    Running         1
# 4. 升级为WSL2
cmd:dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
# 重新启动计算机
# 下载并安装linux 内核更新包 https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
# 5. 升级
cmd:wsl.exe --set-version Ubuntu 2
# 6. 验证是否安装成功
docker run hello-world
  1. 获取镜像

也可以 通过 docker commit 或者 dockerfile自己构建镜像,在容器中增加或删除一些相关文件即可提交为一个镜像。dockerfile 构建镜像安全透明,明确知道做了那些修改,推荐使用,

docker pull mysql:5.7
  1. 根据镜像构建容器
# 1. 创建映射目录
mkdir -p /root/mysql
mkdir -p /root/mysql/data
mkdir -p /root/mysql/conf
# --name 容器名字
# -p 主机端口:容器端口
# -v 主机目录:容器目录
# -e 设置环境变量
# -d 后台运行容器
# 2. 运行容器
docker run --name wsl_mysql \
    -p 13306:3306 \
    -v /root/mysql/data:/var/lib/mysql \
    -v /root/mysql/conf:/etc/mysql/conf.d \
    -e MYSQL_ROOT_PASSWORD=123456 \
    -d \
		mysql:5.7
  1. 进入容器
docker exec -it wsl_mysql bash

参考文献

[1] 什么是Docker容器,它有什么作用?

[2] Docker的三大核心组件:镜像,容器与仓库