Docker 安装 Alpine


Alpine 操作系统是  面向安全的 轻型 Linux 发行版
Alpine 采用了 musl libc 和 busybox 减小系统 体积 和 运行资源消耗
功能上比 busybox 完善  得到开源社区 青睐 在保持瘦身的同时 Alpine 还提供了自己的包管理工具 apk
通过 https://pkgs.alpinelinux.org/packages  查询包信息 也可以直接通过 apk 命令 查询 安装 软件

Alpine 由非商业组织维护 支持 广泛场景的 Linux发行版 特别为资深 重度Linux用户 而优化 关注安全 性能和资源效能
Alpine 镜像 是一个优秀的 适用于生产的基础系统
Alpine Docker 镜像 继承了 Alpine Linux 发行版 优势
相比于其他 Docker 镜像 容量 仅 有 5 MB  非常友好的 包管理机制 官方镜像
官方镜像的大小比较
REPOSITORY    TAG     IMAGE ID        VIRTUAL SIZE
alpine     latest   4e38e38c8ce0      4.799 MB
debian     latest   4d6ce913b130      84.98 MB
ubuntu     latest   b39b81afc8ca      188.3 MB
centos     latest   8efe422e6104      210 MB
使用 docker run 指令直接运行一个 Alpine 容器 并指定运行的 Linux 指令
$ docker run alpine echo '123'

查看镜像

$ docker images
REPOSITORY    TAG                 IMAGE ID            CREATED             SIZE
alpine        latest              4d90542f0623             38 weeks ago        5.58 MB
hello-world   latest              04b44316b6af        2 weeks ago         30.83 MB
列表参数如下
REPOSITORY  指明镜像来自于哪个仓库
TAG  镜像的标记
IMAGE ID  镜像的ID值 该值是唯一的 有相同ID值的镜像是同一个镜像
CREATED 镜像的创建时间
VIRTUAL SIZE  镜像的大小

搜索镜像

$ docker search 镜像名

下载镜像

$ docker pull 镜像名

删除镜像

docker rmi 镜像名
$ docker rmi 8dde5631d4aa

Docker 容器命令

根据镜像创建容器 并启动  镜像 比作类  容器就是对象 通过镜像创建容器
$ docker run --name myalpine  -itd 4d90542f0623
此时命令符变成了
/ # 这是容器内部了 可以使用容器内部系统的命令操作了
如 Alpine 的 apk 使用 exit 命令退出 容器
/ # apk

查看 运行中的 容器列表

$  docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
64024a8a158b        1a8a9ee54eb7        "docker-entrypoint.sh"   3 minutes ago       Up 3 minutes        6379/tcp            test_redis
7e7ee9d4ab30        04b44316b6af        "/bin/sh -c 'php-fpm "   5 minutes ago       Up 5 minutes        80/tcp              teest_hellowold

列表说明
CONTAINER ID 启动的时候生成的ID
IMAGE 该容器使用的镜像
COMMAND 容器启动时调用的命令
CREATED 容器创建时间
STATUS 容器的状态
PORTS 容器系统使用的端口号
NAMES 容器自定义名称

启动容器

$ docker start container-name/container-id
$ docker start 64024a8a158b

停止容器

$ docker stop container-name/container-id
$ docker stop 64024a8a158b

查看容器日志

$ docker logs container-name/container-id
$ docker logs 64024a8a158b

登录容器

$ docker exec -it container-name/container-id 命令名
$ docker exec -it 64024a8a158b  ls /
root@64024a8a158b:/data#
使用 exit 退出容器

列出容器里被改变的文件或者目录

$ docker diff container-name/container-id
$ docker diff 64024a8a158b

显示运行容器 进程信息

$ docker top container-name/container-id
$ docker top 64024a8a158b

从容器 拷贝文件/目录到本地路径
$ docker cp (container-name/container-id):/container_path  path
$ docker cp 64024a8a158b:/root/.bash_history history

端口映射

容器中 运行的软件 使用的端口 在本机和本机的局域网 是不能访问的 所以将 docker 容器中的端口 映射到 当前的端口上
映射容器  6379 端口 到 本机的 6378 端口 如下
$  docker run -d -p 6378:6379 --name port-redis redis
 

删除容器

删除单个容器
$ docker rm container-id
删除所有容器
$ docker rm `$ docker ps -a -q`

迁移至 Alpine 基础镜像

大部分 Docker 官方镜像  支持 Alpine 作为基础镜像 可以很容易进行迁移
ubuntu/debian -> alpine
python:2.7 -> python:2.7-alpine
ruby:2.3 -> ruby:2.3-alpine
 
使用 Alpine 镜像替换 Ubuntu 基础镜像  安装软件包 需要用 apk 包管理器替换 apt 工具
$ apk add --no-cache <package>
Alpine 软件安装包 名字 会与其他发行版 不同 在 //pkgs.alpinelinux.org/packages 确定安装包名称 如果需要的安装包不在主索引内 但是在测试或社区索引中  可以按照以下方法使用这些安装包
$ echo "http://dl-4.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories
$ apk --update add --no-cache <package>

apk命令详解

/ # apk -h
apk-tools 2.10.0, compiled for x86_64.
Installing and removing packages:
add       Add PACKAGEs to 'world' and install (or upgrade) them, while ensuring that all  dependencies are met
del       Remove PACKAGEs from 'world' and uninstall them
System maintenance:
fix       Repair package or upgrade it without modifying main dependencies
update    Update repository indexes from all remote repositories
upgrade   Upgrade currently installed packages to match repositories
cache     Download missing PACKAGEs to cache and/or delete unneeded files from cache
Querying information about packages:
info      Give detailed information about PACKAGEs or repositories
list      List packages by PATTERN and other criteria
dot       Generate graphviz graphs
policy    Show repository policy for packages
Repository maintenance:
index     Create repository index file from FILEs
fetch     Download PACKAGEs from global repositories to a local directory
verify    Verify package integrity and signature
manifest  Show checksums of package contents
Use apk <command> --help for command-specific help.
Use apk --help --verbose for a full command listing.
This apk has coffee making abilities.
apk add --allow-untrusted /path/to/file.apk  #本地安装

apk 命令是 Alpine Linux 下的包管理工具

apk 命令语法

apk install xxx
apk search xxx # 支持正则
apk info xxx # 查看包的详细信息
apk show # list local package
# 卸载并删除 包
apk del openssh openntp vim

apk 命令升级

upgrade 命令升级系统已安装的所以软件包(一般包括内核) 当然也可指定仅升级部分软件包(通过 -u 或 –upgrade 选择指定)
apk update # 更新最新本地镜像源
apk upgrade # 升级软件
apk add --upgrade busybox # 指定升级部分软件包

apk 命令搜索

apk search # 查找所以可用软件包
apk search -v # 查找所以可用软件包及其描述内容
apk search -v 'acf*' # 通过软件包名称查找软件包
apk search -v -d 'docker' # 通过描述文件查找特定的软件包

apk 命令查看包信息

info 命令用于显示软件包的信息
apk 命令实例
apk info # 列出所有已安装的软件包
apk info -a zlib # 显示完整的软件包信息
apk info --who-owns /sbin/lbu # 显示指定文件属于的包

apk镜像站

http://dl-cdn.alpinelinux.org/alpine/
http://nl.alpinelinux.org/alpine/
http://uk.alpinelinux.org/alpine/
http://dl-2.alpinelinux.org/alpine/
http://dl-3.alpinelinux.org/alpine/
http://dl-4.alpinelinux.org/alpine/
http://dl-5.alpinelinux.org/alpine/
http://dl-8.alpinelinux.org/alpine/
http://mirror.yandex.ru/mirrors/alpine/
http://mirrors.gigenet.com/alpinelinux/
http://mirror1.hs-esslingen.de/pub/Mirrors/alpine/
http://mirror.leaseweb.com/alpine/
http://repository.fit.cvut.cz/mirrors/alpine/
http://alpine.mirror.far.fi/
http://alpine.mirror.wearetriple.com/
http://mirror.clarkson.edu/alpine/
http://linorg.usp.br/AlpineLinux/
http://ftp.yzu.edu.tw/Linux/alpine/
http://mirror.aarnet.edu.au/pub/alpine
http://mirror.csclub.uwaterloo.ca/alpine
http://ftp.acc.umu.se/mirror/alpinelinux.org
http://ftp.halifax.rwth-aachen.de/alpine
http://speglar.siminn.is/alpine
http://mirrors.dotsrc.org/alpine
http://ftp.tsukuba.wide.ad.jp/Linux/alpine
http://mirror.rise.ph/alpine
http://mirror.neostrada.nl/alpine/

清华TUNA镜像源 //mirror.tuna.tsinghua.edu.cn/alpine/
中科大镜像源  //mirrors.ustc.edu.cn/alpine/
阿里云镜像源  //mirrors.aliyun.com/alpine/

添加镜像地址  
/etc/apk/repositories
文件中加入对应源地址就行了 一行一个地址
 
$ vi /etc/apk/repositories
# /media/cdrom/apks
http://mirrors.ustc.edu.cn/alpine/v3.10/main
http://mirrors.ustc.edu.cn/alpine/v3.10/community

相关资源
Alpine 官网 http://alpinelinux.org/
Alpine 官方仓库 https://github.com/alpinelinux
Alpine 官方镜像 https://hub.docker.com/_/alpine/
Alpine 官方镜像仓库  //github.com/gliderlabs/docker-alpine