编辑
2023-05-11
docker
00

目录

Docker
1、docker常用命令
2、基于alpine基础镜像构建常见的系统服务
2.1基于alpine构建nginx镜像
2.1.1先构建一个带编译包的alpine镜像
2.1.2 alpine容器的编译环境已经准备好了,接下来准备nginx的配置文件
2.1.3 过程和测试结果
3、将构建的镜像放在阿里云仓库
3.1 本地镜像打标签
4、将构建的镜像,放在自建的harbor中,并且单独可以提供相应的服务
4.1 harbor私有仓库搭建这里就不过多赘述了。网站的另一篇文章有讲。
4.2 镜像打标签并上传
5、docker的常见网络模式
6、用docker-compose将2中构建的镜像组合起来提供服务
6.1 docker-compose文件的配置内容
6.2 docker-compose命令的使用

Docker

1、docker常用命令

shell
docker pull nginx docker save image_name -o name1.tar docker load -i name1.tar docker port container_name #查看容器暴露 docker rm container #删除已停止的容器 docker rm -f container #强制删除容器,不论状态 docker rm -f `docker ps -a -q` #删除所有容器 docker ps -qa | xargs docker rm -f #删除所有容器 docker rm `docker ps -qf status=exited` #删除退出状态的容器 docker container prune -f #删除所有停止的容器 docker rmi images_name docker start $(docker ps -a -q) #批量正常启动或关闭所有容器 docker stop $(docker ps -a -q) docker -it container_name sh docker exec -it container_id sh #测试环境使用此方式,使用exit退出,但容器还在运行,此为推荐方式。 docker run -d --name nginx --restart=always -p 80:80 nginx #容器总是运行,开机随docker启动 docker inspect web01 #可用于查看容器详细信息 docker logs 容器名称 #不论容器是否开启都可看见日志 加-f为跟踪日志 docker run --name a1 ubuntu cat /etc/issue #命令为一次性则执行完退出命令为持续命令则容器不退出。比如:tail -f /var/log/message docker run -it --rm --name web01 --add-host www.zhangt.cc:6.6.6.6 nginx #加--rm会导致容器一旦退出就删除,--add-host往容器的host文件中添加域名和地址解析 docker run -d -v /data/nginx:/data/html --name n1 -P xiaowei200957079/nginx:v1.22-1 #运行一个随机映射端口的nginx容器,数据卷为/data/nginx,容器内挂载对象为/data/html,和nginx容器的nginx.conf对应 docker exec -it nginx tail -f /apps/nginx/logs/access.log #实时查看nginx容器的访问日志 docker volume rm container_name #删除容器临时挂载的数据卷,持久挂载的此操作不支持 #从容器内退出,且容器不停止 同时按三个键,ctrl+p+q

2、基于alpine基础镜像构建常见的系统服务

2.1基于alpine构建nginx镜像

docker都是分层构建的,像是盖房子一样。这里使用dockerfile构建一个alpine-nginx镜像 dockerfile构建镜像只是把手动执行的命令写到一个文件里,然后使用docker build命令生成一个镜像 第一次使用dockerfile构建镜像时可一步一步慢慢来

2.1.1先构建一个带编译包的alpine镜像
shell
#########准备alpine软件下载源############# cat repositories http://mirrors.aliyun.com/alpine/v3.11/main http://mirrors.aliyun.com/alpine/v3.11/community ######编写dockerfile文件,注意dockerfile的首字母必须大写。######### vim Dockerfile #使用哪个镜像,本地没有会从网上下载 FROM alpine:3.11 #标签、作者 LABEL maintainer="zhangwei <xiaowei200957079@163.com>" #复制alpine的下载源网站到alpine镜像中 COPY repositories /etc/apk/repositories #安装包,alpine安装包的命令是apk和Debian不同,--no-cache是不生成缓存,降低镜像容量 RUN apk update && apk --no-cache add iotop gcc libgcc libc-dev libcurl pcre-dev zlib-dev libnfs make pcre pcre2 zip unzip net-tools pstree wget libevent libevent-dev iproute2 #使用docker build构建即可,-t是给镜像起名,最后的.是使用当前目录下的Dockerfile文件 docker build -t alpine-base:v1.0 . ###########结果############# [root@wordpress nginx]#docker images REPOSITORY TAG IMAGE ID CREATED SIZE alpine-base 3.11 56d358fe08c9 22 hours ago 183MB alpine 3.11 a787cb986503 18 months ago 5.62MB
2.1.2 alpine容器的编译环境已经准备好了,接下来准备nginx的配置文件
shell
#########Dockerfile文件内容########## cat nginx/Dockerfile #基于刚才打好的镜像包 FROM alpine-base:3.11 #标签、作者 LABEL maintainer="zhangwei <xiaowei200957079@163.com>" #ADD命令比较特殊,不止复制、还会自动解压。 ADD nginx-1.20.0.tar.gz /usr/local/src/ #创建编译文件夹 RUN mkdir /apps/nginx -p #编译nginx RUN cd /usr/local/src/nginx-1.20.0/ && ./configure --prefix=/apps/nginx && make && make install && ln -s /apps/nginx/sbin/nginx /usr/bin/ #创建nginx账号 RUN addgroup -g 2019 -S nginx && adduser -s /sbin/nologin -S -D -u 2019 -G nginx nginx #复制主配置文件 COPY nginx.conf /apps/nginx/conf/nginx.conf #复制首页文件 COPY index.html /data/nginx/index.html #授权,创建软链接 RUN chown -R nginx.nginx /data/nginx/ /apps/nginx/ #开放的端口 EXPOSE 80 443 #注意,这这个命令是让nginx在前台执行。docker容器和操作系统不一样,操作系统运行的进场都在后台,但是docker容器的进场必须运行在前台,不然就自动退出。 CMD ["nginx","-g","daemon off;"] #########nginx.conf配置文件########## #修改一个nginx主页面的根目录既可以 cat nginx.conf ..... location / { root /data/nginx/; index index.html index.htm; } ..... #########主页面文件######## cat index.html <h1>Welcome to nginx!</h1>

2.1.3 过程和测试结果

  1. 打镜像过程,我已经打过镜像了,所有是下图,第一次打镜像主要都是nginx的编译过程。

docker-alpine.jpg 2. 测试结果

sh
#基于这个镜像开启一个容器 docker run -d -p 8888:80 --name 333 alpine-nginx-1.20:v1.2 #这里直接使用curl来测试了,没有缓存,结果还快。 [root@wordpress nginx]#curl 127.0.0.1:8888 Welcome to nginx!

3、将构建的镜像放在阿里云仓库

3.1 本地镜像打标签

  1. 需要先将本地的镜像打标签,格式为阿里云的格式
shell
#docker tag 解析 docker tag 本地镜像名称:版本 镜像网站:Port/仓库名称或项目名/镜像名称:版本号 ####################过程############################## [root@wordpress nginx]#docker images REPOSITORY TAG IMAGE ID CREATED SIZE alpine-nginx-1.20 v1.1 c9887509b772 4 hours ago 212MB alpine-nginx-1.20 v1.2 c9887509b772 4 hours ago 212MB alpine-base 3.11 56d358fe08c9 25 hours ago 183MB fs185085781/webos v1.2.6 6e80c7f2c1b6 2 weeks ago 131MB mereith/van-blog v0.48.0 ba8f34150b34 2 months ago 1.3GB mariadb 10.8 48ce71c1ad6a 3 months ago 369MB mongo 4.4.16 ef85efd58fca 8 months ago 438MB alpine 3.11 a787cb986503 18 months ago 5.62MB [root@wordpress nginx]#docker tag alpine-nginx-1.20:v1.1 registry.cn-hangzhou.aliyuncs.com/zhang_image/alpine-nginx-1.20:v1.1 [root@wordpress nginx]#docker images REPOSITORY TAG IMAGE ID CREATED SIZE alpine-nginx-1.20 v1.1 c9887509b772 4 hours ago 212MB registry.cn-hangzhou.aliyuncs.com/zhang_image/alpine-nginx-1.20 v1.1 c9887509b772 4 hours ago 212MB alpine-base 3.11 56d358fe08c9 25 hours ago 183MB
  1. 登录阿里云镜像仓库并上传
shell
[root@wordpress nginx]#docker login --username=sun了个晒0623 registry.cn-hangzhou.aliyuncs.com Password: WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded [root@wordpress nginx]#docker push registry.cn-hangzhou.aliyuncs.com/zhang_image/alpine-nginx-1.20:v1.1 The push refers to repository [registry.cn-hangzhou.aliyuncs.com/zhang_image/alpine-nginx-1.20] 73b93f5758a1: Pushed 663e58f26f0b: Pushed dc46d45f5c7c: Pushed 347116f99cf2: Pushed 91351800dc54: Pushed 50ddf07799e8: Pushed a323b2177207: Pushed 5cfb52113a45: Pushed 5401342d9d3c: Pushed 69715584ec78: Pushed v1.1: digest: sha256:0e5e455db531138a678ba5d413fd84be7982a17f173322102b937697df1ef4ad size: 2410 [root@wordpress nginx]#
  1. 阿里云网站查看结果

aliyun.jpg 到此就上传完成了。

4、将构建的镜像,放在自建的harbor中,并且单独可以提供相应的服务

4.1 harbor私有仓库搭建这里就不过多赘述了。网站的另一篇文章有讲。

4.2 镜像打标签并上传

和阿里云一致,镜像打标签。然后上传即可

shell
#镜像打标签为私有仓库的格式 [root@rocky7 data]# docker tag alpine-nginx-1.20:v1.1 10.0.0.140/alpine/alpine-nginx-1.20:v1.1 #上传 [root@rocky7 data]# docker push 10.0.0.140/alpine/alpine-nginx-1.20:v1.1 The push refers to repository [10.0.0.140/alpine/alpine-nginx-1.20] 73b93f5758a1: Pushed 663e58f26f0b: Pushed dc46d45f5c7c: Pushed 347116f99cf2: Pushed 91351800dc54: Pushed 50ddf07799e8: Pushed a323b2177207: Pushed 5cfb52113a45: Pushed 5401342d9d3c: Pushed 69715584ec78: Pushed v1.1: digest: sha256:0e5e455db531138a678ba5d413fd84be7982a17f173322102b937697df1ef4ad size: 2410

5、docker的常见网络模式

shell
#Docker 的网络支持5种网络模式,默认的网络模式有三个 : host、bridge、none - none #没有网络,没有IP,单机版 - bridge #桥接,可做NAT映射端口,与172段的容器互通 - host #使用宿主机网络地址,容器内端口和宿主机端口共同对外发布 - container - network-name #网络模式指定 - 默认新建的容器使用Bridge模式,创建容器时,docker run 命令使用以下选项指定网络模式 docker run --network <mode> docker run --net=<mode> <mode>: 可是以下值 none bridge host container:<容器名或容器ID> <自定义网络名称> docker run --network none -d --name web01 nginx Host模式特点 - 使用参数 --network host 指定 - 共享宿主机网络 - 网络性能无损耗 - 网络故障排除相对简单 - 各容器网络无隔离 - 网络资源无法分别统计 - 端口管理困难: 容易产生端口冲突 - 不支持端口映射 Bridge网络模式特点 - 网络资源隔离: 不同宿主机的容器无法直接通信,各自使用独立网络 - 无需手动配置: 容器默认自动获取172.17.0.0/16的IP地址,此地址可以修改 - 可访问外网: 利用宿主机的物理网卡,SNAT连接外网 - 外部主机无法直接访问容器: 可以通过配置DNAT接受外网的访问 - 低性能较低: 因为可通过NAT,网络转换带来更的损耗 - 端口管理繁琐: 每个容器必须手动指定唯一的端口,容器产生端口冲容 None模式特点 - 使用参数 --network none 指定 - 默认无网络功能,无法和外部通信 - 无法实现端口映射 - 适用于测试环境 Container 模式特点 - 使用参数 –-network container:名称或ID 指定 - 与宿主机网络空间隔离 - 空器间共享网络空间 - 适合频繁的容器间的网络通信 - 直接使用对方的网络,较少使用

6、用docker-compose将2中构建的镜像组合起来提供服务

docker-compose

docker-compose是一个docker容器单机编排工具,可以将多个容器组合在一起,以构建一个完整的应用程序。这些容器可以共享网络、存储和其他资源,从而形成一个完整的应用程序。默认安装docker时是没有的,需要下载二进制包。软连接到/usr/bin下。然后直接使用即可。harbor那篇文章已经介绍了如何安装。这简单说一下如何使用

6.1 docker-compose文件的配置内容

shell
version:指定Docker Compose配置文件的版本。 services:定义应用程序中的服务,并指定容器的名称、映像、端口和卷等。 volumes:定义应用程序使用的卷,并指定卷的名称、类型、路径等。 networks:定义应用程序使用的网络,并指定网络的名称、类型、IP地址等。 ports:定义容器与主机之间的端口映射关系。 environment:定义容器的环境变量,以便容器能够获取应用程序中的配置信息。 depends_on:指定服务之间的依赖关系,以确保服务按正确的顺序启动。 restart:指定容器在退出时是否自动重启。 build:定义用于构建容器的Dockerfile文件路径。 command:定义容器启动时要执行的命令。 这些选项可以在Docker Compose配置文件中使用,以定义和配置应用程序服务和容器。使用这些选项可以轻松地管理和部署Docker容器,使应用程序的开发和部署更加简单和可重复。

6.2 docker-compose命令的使用

yaml
docker-compose up:构建并启动应用程序的服务。 docker-compose down:停止应用程序的服务并删除相关的容器。 docker-compose ps:列出应用程序的服务及其相关的容器。 docker-compose logs:查看应用程序服务的日志。 docker-compose build:构建应用程序服务的镜像。 docker-compose start:启动应用程序服务的容器。 docker-compose stop:停止应用程序服务的容器。 docker-compose restart:重启应用程序服务的容器。 docker-compose exec:在正在运行的容器中执行命令。 docker-compose down --volumes:停止应用程序的服务并删除相关的容器和卷。
  1. 使用docker-compose文件方式打开使用alpine-nginx镜像构建nginx服务
shell
vim docker-compose.yml version: '3' services: alpine-nginx: image: alpine-nginx-1.20:v1.1 ports: - 8888:80 container_name: alpine-nginx
  1. 让容器在后台运行使用-d选项即可docker-compose up -d
  2. 验证结果
yaml
#启动容器 [root@wordpress nginx]#docker-compose up -d [+] Running 1/1 Container alpine-nginx Started 0.5s #查看以docker-compose命令启动的容器 [root@wordpress nginx]#docker-compose ps NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS alpine-nginx alpine-nginx-1.20:v1.1 "nginx -g 'daemon of…" alpine-nginx 50 seconds ago Up 49 seconds 443/tcp, 0.0.0.0:8888->80/tcp, :::8888->80/tcp #验证页面 [root@wordpress nginx]#curl 127.0.0.1:8888 this is test html
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:笑一个吧~

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 本文为博主「笑一个吧~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 许可协议。转载请注明出处!