shelldocker 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
docker都是分层构建的,像是盖房子一样。这里使用dockerfile构建一个alpine-nginx镜像 dockerfile构建镜像只是把手动执行的命令写到一个文件里,然后使用docker build命令生成一个镜像 第一次使用dockerfile构建镜像时可一步一步慢慢来
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
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. 测试结果
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!
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
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]#
到此就上传完成了。
和阿里云一致,镜像打标签。然后上传即可
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
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 指定
- 与宿主机网络空间隔离
- 空器间共享网络空间
- 适合频繁的容器间的网络通信
- 直接使用对方的网络,较少使用
docker-compose
docker-compose是一个docker容器单机编排工具,可以将多个容器组合在一起,以构建一个完整的应用程序。这些容器可以共享网络、存储和其他资源,从而形成一个完整的应用程序。默认安装docker时是没有的,需要下载二进制包。软连接到/usr/bin下。然后直接使用即可。harbor那篇文章已经介绍了如何安装。这简单说一下如何使用
shellversion:指定Docker Compose配置文件的版本。 services:定义应用程序中的服务,并指定容器的名称、映像、端口和卷等。 volumes:定义应用程序使用的卷,并指定卷的名称、类型、路径等。 networks:定义应用程序使用的网络,并指定网络的名称、类型、IP地址等。 ports:定义容器与主机之间的端口映射关系。 environment:定义容器的环境变量,以便容器能够获取应用程序中的配置信息。 depends_on:指定服务之间的依赖关系,以确保服务按正确的顺序启动。 restart:指定容器在退出时是否自动重启。 build:定义用于构建容器的Dockerfile文件路径。 command:定义容器启动时要执行的命令。 这些选项可以在Docker Compose配置文件中使用,以定义和配置应用程序服务和容器。使用这些选项可以轻松地管理和部署Docker容器,使应用程序的开发和部署更加简单和可重复。
yamldocker-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:停止应用程序的服务并删除相关的容器和卷。
shellvim docker-compose.yml version: '3' services: alpine-nginx: image: alpine-nginx-1.20:v1.1 ports: - 8888:80 container_name: alpine-nginx
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
本文作者:笑一个吧~
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 本文为博主「笑一个吧~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 许可协议。转载请注明出处!