Dockerfile实例

2023-03-17 11:06:32 浏览数 (3)

一、整理ubuntu的软件包管理命令和服务管理命令

Ubuntu软件包管理

Debian软件包的包名叫 deb ,类似于rpm包; deb 包的管理方式有 dpkg 、apt 两种方式deb包。对于软件管理有dpkg apt两种:

  • dpkg : package manager for Debin ,可以实现安装、删除,但无法解决依赖项;
  • apt : advanced Packaging Tool ,功能强大的软件管理工具,类似于 dnf/yum ;

dpkg命令 – 管理软件安装包

语法格式:dpkg [参数] 软件包

常用参数:

-i

安装软件包

-r

删除软件包

-l

显示已安装软件包列表

-L

显示于软件包关联的文件

-c

显示软件包内文件列表

apt-get命令 – 管理服务软件

语法格式:apt-get [参数] 软件名

常用参数:

update

重新获取软件包列表

upgrade

更新软件

install

安装软件

remove

卸载软件

autoremove

自动卸载不使用的软件

source

下载源代码

build-dep

编译依赖关系

dist-upgrade

更新系统

purge

删除配置文件

clean

清理垃圾文件

check

检查是否损坏

ubuntu启动、关闭、重启服务service命令

开启服务

代码语言:javascript复制
#service 服务名 start
service nginx start

关闭服务

代码语言:javascript复制
#service 服务名 stop
service nginx stop

重启服务

代码语言:javascript复制
#service 服务名 restart
service nginx restart

查看服务状态

代码语言:javascript复制
#service 服务名 status
service nginx status
二、整理alpine的软件包管理命令和服务管理命令

Alpine Linux 包管理

apline安装源管理

inux默认的都是外国的服务器,我们访问比较慢,所以就有了镜像服务器放在国内

  • 中科大:http://mirrors.ustc.edu.cn/alpine/
  • 清华大学:https://mirror.tuna.tsinghua.edu.cn/alpine/

更改完 /etc/apk/repositories 文件后请运行 apk update 更新索引以生效

代码语言:javascript复制
apk upgrade --no-cache

alpine 常用包管理命令

Alpine使用apk进行包管理,通过apk –help命令查看完整的包管理命令,下面列举常用命令:

1、update:从远程镜像源中更新本地镜像源索引

update命令会从各个镜像源列表下载APKINDEX.tar.gz并存储到本地缓存,一般在/var/cache/apk/(Alpine在该目录下)、 /var/lib/apk/ 、/etc/apk/cache/下。

代码语言:javascript复制
$ apk update

2、add:安装PACKAGES并自动解决依赖关系

add命令从仓库中安装软件包,自动管理依赖。

代码语言:javascript复制
$ apk add openssh openntp vim
$ apk add --no-cache mysql-client
$ apk add docker --update-cache --repository http://mirrors.ustc.edu.cn/alpine/v3.4/main/ --allow-untrusted

安装指定版本软件包

代码语言:javascript复制
$ apk add asterisk=1.6.0.21-r0
$ apk add 'asterisk
$ apk add 'asterisk>1.6.1'

3、del:卸载并删除PACKAGES

代码语言:javascript复制
$ apk del openssh openntp vim

4、upgrade:升级当前已安装的软件包 upgrade命令升级系统已安装的所以软件包(一般包括内核),当然也可指定仅升级部分软件包(通过-u或–upgrade选择指定)。

代码语言:javascript复制
$ apk update #更新最新本地镜像源
$ apk upgrade #升级软件
$ apk add --upgrade busybox #指定升级部分软件包

5、search:搜索软件包

search命令搜索可用软件包,-v参数输出描述内容,支出通配符,-d或—description参数指定通过软件包描述查询。

代码语言:javascript复制
$ apk search #查找所以可用软件包
$ apk search -v #查找所以可用软件包及其描述内容
$ apk search -v 'acf*' #通过软件包名称查找软件包
$ apk search -v -d 'docker' #通过描述文件查找特定的软件包

6、info命令用于显示软件包的信息。

代码语言:javascript复制
$ apk info #列出所有已安装的软件包
$ apk info -a zlib #显示完整的软件包信息
$ apk info --who-owns /sbin/lbu #显示指定文件属于的包

Alpine Linux服务管理

alpine没有使用 systemctl 来进行服务管理,使用的是 rc 系列命令

精简版的 alpine 是没有 rc 系列命令的,可用 apk add --no-cache openrc 安装

  • rc-update 主要用于不同运行级增加或者删除服务
  • rc-status 主要用于运行级的状态管理
  • rc-service 主用于管理服务的状态
  • openrc 主要用于管理不同的运行级
三、使用dockerfile,alpine作为基础镜像,部署nginx。

1、apk 安装nginx 2、源代码编译安装nginx

代码语言:javascript复制
# apk 安装nginx
[root@zhao ~]#mkdir nginx
[root@zhao ~]#cd nginx
[root@zhao ~/nginx]#vim Dockerfile
FROM alpine
RUN echo "https://mirrors.aliyun.com/alpine/v3.11/main/" > /etc/apk/repositories && 
echo "https://mirrors.aliyun.com/alpine/v3.11/community/" >> /etc/apk/repositories && 
apk add nginx && mkdir /run/nginx/
EXPOSE 80 
ENTRYPOINT ["nginx","-g","daemon off;"]

[root@zhao ~/nginx]#docker build -t nginx-a:v1 .
[root@zhao ~/nginx]#docker images 
REPOSITORY   TAG       IMAGE ID       CREATED              SIZE
nginx-a      v1        680497aefd6d   About a minute ago   8.54MB
alpine       latest    9c6f07244728   3 weeks ago          5.54MB
centos       latest    5d0da3dc9764   11 months ago        231MB
[root@zhao ~/nginx]#docker run -d -P nginx-a:v1 
7ef50af037649cecaff747c018a6e63e0b0941eee8df94546044c8b7510b46d1
[root@zhao ~/nginx]#docker ps
CONTAINER ID   IMAGE        COMMAND                  CREATED         STATUS         PORTS                                     NAMES
7ef50af03764   nginx-a:v1   "nginx -g 'daemon of…"   4 seconds ago   Up 3 seconds   0.0.0.0:49153->80/tcp, :::49153->80/tcp   practical_brown
[root@zhao ~/nginx]#docker exec -it 7ef50af03764 /bin/sh
/ # vi /etc/nginx/conf.d/default.conf 
# This is a default site configuration which will simply return 404, preventing
# chance access to any other virtualhost.

server {
	listen 80 default_server;
	listen [::]:80 default_server;

	# Everything is a 404
	location / {
		index index.html;
	}

	# You may need this to prevent return 404 recursion.
	location = /404.html {
		internal;
	}
}
/ # nginx -s reload
代码语言:javascript复制
# 源代码编译安装nginx
[root@zhao ~/nginx-alpine]#tree
.
├── Dockerfile
└── software
    └── nginx-1.19.7.tar.gz

1 directory, 2 files
[root@zhao ~/nginx-alpine]#vim Dockerfile 
FROM alpine:latest
ENV version 1.19.7
ENV PATH /usr/local/nginx/sbin:$PATH
ADD software/nginx-${version}.tar.gz /usr/src
EXPOSE 80 

RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && 
    adduser -S -H -s /sbin/nologin nginx && 
    apk add --no-cache -U pcre-dev openssl openssl-dev gd-dev g   zlib-dev make && 
    mkdir -p /var/log/nginx && 
    chown -R nginx /var/log/nginx && 
    cd /usr/src/nginx-${version} && 
    ./configure 
    --prefix=/usr/local/nginx 
    --user=nginx 
    --group=nginx 
    --with-debug 
    --with-http_ssl_module 
    --with-http_realip_module 
    --with-http_image_filter_module 
    --with-http_gunzip_module 
    --with-http_gzip_static_module 
    --with-http_stub_status_module 
    --http-log-path=/var/log/nginx/access.log 
    --error-log-path=/var/log/nginx/error.log && 
    make && make install && 
    sed -i '/nobody/s/#//g' /usr/local/nginx/conf/nginx.conf && 
    rm -rf /var/cache/* /usr/src/*

WORKDIR /usr/local/nginx

CMD ["-g","daemon off;"]

ENTRYPOINT ["/usr/local/nginx/sbin/nginx"]

[root@zhao ~/nginx-alpine]#docker build -t nginx-s:v1 .
Successfully built 942391d0e251
Successfully tagged nginx-s:v1
[root@zhao ~/nginx-alpine]#docker run -d --name nginxv1 -p 80:80  nginx-s:v1 
7db71468b11cdf3bcd6c116453f40284ba5b3817a21fcbfd8f821b335a743745
[root@zhao ~/nginx-alpine]#docker ps
CONTAINER ID   IMAGE        COMMAND                  CREATED          STATUS          PORTS                                        NAMES
7db71468b11c   nginx-s:v1   "/usr/local/nginx/sb…"   4 seconds ago    Up 3 seconds    0.0.0.0:80->80/tcp, :::80->80/tcp, 443/tcp   nginxv1

0 人点赞