zoukankan      html  css  js  c++  java
  • 关于Alpine

    Alpine介绍

    Alpine 操作系统是一个面向安全的轻型 Linux 发行版。它不同于通常 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 左右(对比 Ubuntu 系列镜像接近 200 MB),且拥有非常友好的包管理机制。官方镜像来自 docker-alpine 项目。
    
    Alpine 中软件安装包的名字可能会与其他发行版有所不同,可在 https://pkgs.alpinelinux.org/packages 网站搜索并确定安装包名称。如果需要的安装包不在主索引内,但是在测试或社区索引中。可按照以下方法使用这些安装包。
    $ echo "http://dl-4.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories
    $ apk --update add --no-cache <package>
    

    编写Dockerfile

    [root@node2 ~]# vim Dockerfile
    FROM alpine:3.13.6
    
    RUN set -x; 
        echo "http://mirrors.aliyun.com/alpine/latest-stable/main/" > /etc/apk/repositories && 
        echo "http://mirrors.aliyun.com/alpine/latest-stable/community/" >> /etc/apk/repositories && 
        apk upgrade && 
        apk add --no-cache ca-certificates && 
        apk add --no-cache unzip curl bash bash-doc bash-completion bash wget vim net-tools && 
        rm -rf /tmp/* /var/cache/apk/*
    
    WORKDIR /
    
    ADD jdk-8u301-linux-x64.tar.gz apache-tomcat-9.0.53.tar.gz /
    
    COPY glibc-2.32-r0.apk glibc-bin-2.32-r0.apk glibc-dev-2.32-r0.apk glibc-i18n-2.32-r0.apk /
    COPY sgerrand.rsa.pub   /etc/apk/keys/sgerrand.rsa.pub
    
    RUN /bin/bash && 
        apk add glibc-2.32-r0.apk glibc-bin-2.32-r0.apk glibc-dev-2.32-r0.apk glibc-i18n-2.32-r0.apk && 
        rm -rf *.apk  /var/cache/apk/* && 
        mv /apache-tomcat-9.0.53  /tomcat9 && 
        rm -rf /tomcat9/webapps/{docs,examples,host-manager,manager} && 
    # install JRE
        apk add --no-cache openjdk8-jre-base && 
        rm -rf /var/cache/apk/*
    
    COPY Shanghai /etc/localtime
    
    ENV JAVA_HOME=/jdk1.8.0_301
    ENV CLASSPATH=JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    ENV PATH=$PATH:.JAVA_HOME/bin:$PATH
    
    EXPOSE 8080
    
    CMD ["/tomcat9/bin/catalina.sh","run"]
    
    

    构建镜像

    [root@node2 ~]# docker build -t alpine:v1 .
    

    创建容器

    该步可自定义添加其他参数

    [root@node2 ~]# docker run -itd --name tomcat1 -p 8080:8080 alpine:v1
    

    Alpine包管理

    Alpine使用apk进行包管理,下面介绍常用命令
    
    1.apk update
    $ apk update #更新最新镜像源列表
    
    2.apk search
    $ apk search #查找所以可用软件包
    $ apk search -v #查找所以可用软件包及其描述内容
    $ apk search -v 'acf*' #通过软件包名称查找软件包
    $ apk search -v -d 'docker' #通过描述文件查找特定的软件包
    
    3.apk add
    $ apk add openssh #安装一个软件
    $ apk add openssh openntp vim   #安装多个软件
    $ apk add --no-cache mysql-client  #不使用本地镜像源缓存,相当于先执行update,再执行add
    
    4.apk info
    $ apk info #列出所有已安装的软件包
    $ apk info -a zlib #显示完整的软件包信息
    $ apk info --who-owns /sbin/lbu #显示指定文件属于的包
    
    5.apk upgrade
    $ apk upgrade #升级所有软件
    $ apk upgrade openssh #升级指定软件
    $ apk upgrade openssh openntp vim   #升级多个软件
    $ apk add --upgrade busybox #指定升级部分软件包
    
    6.apk del
    $ apk del openssh  #删除一个软件
    

    Alpine常用命令

    [root@node2 ~]# docker exec -it b013b /bin/sh
    / # apk search --no-cache openssh
    
    
    
    

    Alpine安装常用服务

    # 配置sshd
    / # apk add --no-cache openssh-server openssh-client
    / # sed -i "s/#PermitRootLogin.*/PermitRootLogin yes/g" /etc/ssh/sshd_config && 
    / # ssh-keygen -t rsa -P "" -f /etc/ssh/ssh_host_rsa_key && 
    / # ssh-keygen -t ecdsa -P "" -f /etc/ssh/ssh_host_ecdsa_key && 
    / # ssh-keygen -t ed25519 -P "" -f /etc/ssh/ssh_host_ed25519_key && 
    / # echo "root:admin" | chpasswd       # root用户的密码改为admin
    / # /usr/sbin/sshd -D                  # 指定此选项后sshd不会分离也不会成为守护进程
    / # ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
    126: eth0@if127: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP 
        link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
        inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
           valid_lft forever preferred_lft forever
    
    / # exit
    
    # 本机测试ssh连接
    [root@node2 ~]# ssh root@172.17.0.2
    root@172.17.0.2's password:                 # 密码是admin
    Welcome to Alpine!
    
    The Alpine Wiki contains a large amount of how-to guides and general
    information about administrating Alpine systems.
    See <http://wiki.alpinelinux.org/>.
    
    You can setup the system with the command: setup-alpine
    
    You may change this message by editing /etc/motd.
    
    b013b0ebcb2f:~# cat /etc/issue 
    Welcome to Alpine Linux 3.13
    Kernel 
     on an m (l)
    

    FAQ

    提示源没有这个openssh的包
    
    解决方式:
    在dockerfile中改为国内的源
    http://mirrors.aliyun.com/alpine/latest-stable/main/
    http://mirrors.aliyun.com/alpine/latest-stable/community/
    
    创建容器文件修改
    [root@docker43 ~]# docker run -it alpine
    / # vi /etc/apk/repositories
    http://mirrors.aliyun.com/alpine/latest-stable/main/
    http://mirrors.aliyun.com/alpine/latest-stable/community/
                                                         
    #http://dl-cdn.alpinelinux.org/alpine/v3.8/main    
    #http://dl-cdn.alpinelinux.org/alpine/v3.8/community
    
    # 注释或者删除原来的默认源,添加阿里云的源,然后执行apk update,在进行安装就OK了
    
    
    2、ssh 启动问题
    / # /etc/init.d/sshd start
    /bin/sh: /etc/init.d/sshd: not found
    
    这样的方式不能启动,需要安装一个alpine的管理工具
    apk add --no-cache openrc
    / # /etc/init.d/sshd start
     * WARNING: sshd is already starting
     所以使用 /usr/sbin/sshd -D 方式启动。但是又出现如下错误
     / # /usr/sbin/sshd -D
    Could not load host key: /etc/ssh/ssh_host_rsa_key
    Could not load host key: /etc/ssh/ssh_host_ecdsa_key
    Could not load host key: /etc/ssh/ssh_host_ed25519_key
    sshd: no hostkeys available -- exiting.
    解决方式:
    ssh-keygen -t rsa -P "" -f /etc/ssh/ssh_host_rsa_key
    ssh-keygen -t ecdsa -P "" -f /etc/ssh/ssh_host_ecdsa_key
    ssh-keygen -t ed25519 -P "" -f /etc/ssh/ssh_host_ed25519_key
    
    再次启动
    / # /usr/sbin/sshd -D
    
    启动成功
    
    
    3、创建容器后的网络问题
    [root@docker43 opt]# docker run -it alpine
    WARNING: IPv4 forwarding is disabled. Networking will not work.
    
    解决方式:
    [root@docker43 ~]# vim /etc/sysctl.conf
    net.ipv4.ip_forward=1    # 添加这一行
    
    [root@docker43 ~]# docker run -it alpine
    / #
    
  • 相关阅读:
    django model:auto_now_add 和 auto_now
    算法(2):数据结构
    Flask(2):登陆验证
    Flask(1):基本示例、配置文件、路由、请求和响应、模板渲染
    linux基础
    算法(1):查找&排序
    利用dispatch_once创建单例
    UIScrollView的属性总结
    ios开发 UITableViewController
    [深入浅出Cocoa]详解键值观察(KVO)及其实现机理
  • 原文地址:https://www.cnblogs.com/smlile-you-me/p/15347413.html
Copyright © 2011-2022 走看看