docker的使用和镜像的推送

docker的使用和镜像的推送

容器的本质

包裹着一个运行中的进程,容器空间

搜索镜象

docker search 镜像名
docker search redis 

docker search wordpress 

# 在搜素一个ubantu系统

停止容器,记录

[root@docker-100 ~]# docker ps 
CONTAINER ID   IMAGE          COMMAND                  CREATED          S                      NAMES
0702fdda2c71   nginx:1.19.7   "/docker-entrypoint.…"   32 minutes ago   U/tcp, :::80->80/tcp   nervous_nightingale



3种的方法
docker stop 070                     前3位id
docker stop 0702fdda2c71			全部的id
docker stop nervous_nightingale		进程的名字

删除容器,记录

删除容器,记录

1.查看容器记录  
docker ps -a 


2,彻底释放这个容器记录的资源
docker rm 

批量停止(危险命令注意…)

docker ps --help 看看手册

docker stop  $(docker ps -q)

批量的删除容器记录(注意。。。。)

docker rm  删除容器记录
docker ps -aq 查询容器所有的id记录

docker rm `docker ps -aq`
docker rm $(docker ps -aq)

下载镜像

docker pull redis   # redis(依赖基于基础镜像,来自于xx镜像,centos,ubuntu,....具体是要进入这个容器命名空间,去看看)

docker pull unbuntu:latest  #下载一个ubuntu 系统发行版,纯净版本, + 宿主机的内核,运行,可以使用Ubuntu环境。

docker pull wordpress 

在这里插入图片描述

# docker 分层存储的特点

看到了许多的pull complete 
这个证明了,docker分层镜像存储的特点。
有层,公用的,节省空间。

有的层是公用的,可以公用,就不需要再次的下载
小结镜像分层原理
1. docker的镜像下载
	是下载一层一层的镜像文件,组合而来 docker history redis

2. 多个镜像可能引用同一个一层一层的空间
	因此可以实现磁盘的节省。

查看镜像列表

# 命令
dockers image ls 
docker images 


[root@docker-100 docker]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
redis         latest    78f2dcef8858   27 hours ago   128MB
wordpress     latest    4b3e99838f3d   2 weeks ago    703MB
ubuntu        latest    a0e45e2ce6e6   2 weeks ago    78.1MB
nginx         latest    a830707172e8   4 weeks ago    192MB
hello-world   latest    74cc54e27dc4   3 months ago   10.1kB

服务名称         版本         镜像id号         创建时间    大小

在这里插入图片描述

docker history nignx:latest

可以简略的看到 
# 最后一步 nginx的启动的程序

# 也可以看到对应nginx的版本,


# 查看系统镜像列表
[root@docker-100 ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
redis         latest    78f2dcef8858   39 hours ago   128MB
wordpress     latest    4b3e99838f3d   2 weeks ago    703MB
ubuntu        latest    a0e45e2ce6e6   2 weeks ago    78.1MB
nginx         latest    a830707172e8   4 weeks ago    192MB
hello-world   latest    74cc54e27dc4   3 months ago   10.1kB

运行镜像,生成容器(nginx 1.19.7 容器,web服务)

docker pull  nginx:1.19.7


1, 本地运行模式(同一个docker 的容器都可以相互的访问),nginx 只在容器内的网络空间运行,不对外(docker run 别加上端口映射)

docker run nginx:1.19.7   #前台运行,日志的打印。

docker run  -d  nginx:1.19.7   #后台运行

[root@docker-100 ~]# docker run  -d  nginx:1.19.7
c8ce7175034a7c9d834716c4523e60aef3cad8e918b98ee3ce8f9f9134e0ec50



2. 指定容器的运行名字,以及看看,基于一个镜像可以运行N个容器进程
[root@docker-100 ~]# docker run  -d  nginx:1.19.7
c8ce7175034a7c9d834716c4523e60aef3cad8e918b98ee3ce8f9f9134e0ec50
[root@docker-100 ~]# docker run  -d  nginx:1.19.7
b8e564aeee638d137ab552786bb28942b78b59047165bc0cc209cfd02ebab75e
[root@docker-100 ~]# docker run  -d  nginx:1.19.7
dc1ba1987bc28ba86253f2842d32b42d735e00b1079a05fb4f976dbaee3d10ca


[root@docker-100 ~]# docker ps 
CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS     NAMES
dc1ba1987bc2   nginx:1.19.7   "/docker-entrypoint.…"   17 seconds ago   Up 16 seconds   80/tcp    confident_hellman
b8e564aeee63   nginx:1.19.7   "/docker-entrypoint.…"   19 seconds ago   Up 18 seconds   80/tcp    cranky_ride
c8ce7175034a   nginx:1.19.7   "/docker-entrypoint.…"   2 minutes ago    Up 2 minutes    80/tcp    zen_ride
[root@docker-100 ~]# 


#  --name玩法,制定名字,不能冲突
[root@docker-200 /opt]#docker run --name php_nginx  -d nginx:latest 


# 这些容器的ip都是这个网段的  172.17.0.1

查看容器的ipaddr

# 查看容器的ip ,宿主机是可以和这个容器通信的(非docker宿主机不行)

# 查看容器的详细信息,输出为json结果的命令


docker inspect php_nginx(容器的名字)

在这里插入图片描述

# 我们去访问这个容器的ip地址

[root@docker-100 ~]# curl -I 172.17.0.5
HTTP/1.1 200 OK
Server: nginx/1.27.5
Date: Thu, 15 May 2025 08:26:08 GMT
Content-Type: text/html
Content-Length: 615
Last-Modified: Wed, 16 Apr 2025 12:01:11 GMT
Connection: keep-alive
ETag: "67ff9c07-267"
Accept-Ranges: bytes
# 对外的运行模式
对外访问一个1.19.7的nginx ,直接访问宿主机的80,就可以看到1.19.7版本的nginx

docker run -d -p 80:80 nginx:1.19.7

在这里插入图片描述

运行镜像,生成容器(ubuntu容器)

容器,下载多个发行版的环境 (base image 基础环境)

# 如果没有容器怎么办
1. 准备基础的环境,还要部署依赖环境
		- centos 7.9
		- 几十G
		- yum install nginx php-fpm mysql 
		- 启动各个程序
		
		
		
有了容器方便吗?
1, 获取容器的镜像, docker pull centos:7.9x(只有发行版)
# 获取Ubuntu镜像
docker pull ubuntu:latest

2. 进入一个ubuntu的环境,去部署xxx

# 新参数
# docker run 的参数
# -t 开启一个中断
-t, --tty                            Allocate a pseudo-TTY
# 标准输入,给容器输入些东西
-i, --interactive                    Keep STDIN open even if not attached


#进入 ubuntu 容器的空间内
[root@docker-100 ~]# docker run -i -t ubuntu bash


如何判断你是容器内还是宿主机器
# 看ip     看hostname  网络    network namespace     
# 看进程     进程pid namespace     ps -ef| wc -l
#  命令提示符  看boot目录   file system namespace     , cat /etc/os-release  

在这里插入图片描述

在这里插入图片描述

容器内没有前台运行的进程,会挂掉

在这里插入图片描述

自定义一个docker镜像

docker hub 下载一个镜像centos:7.9.2009 

2. 再此基础环境上,部署新的,你需要的环境,,提供了网络工具包,net-tools ,vim,nginx
[root@docker-100 ~]# docker run -it centos:7.9.2009  bash 

步骤的开始(下一步要写dockerfile 构建镜像)做一个伏笔

# 具体的步骤
docker 进入 centos
docker run -it centos:7.9.2009  bash 

1,部署的环境有了
2,更新yum源

# 清空原有yum环境
rm -f /etc/yum.repos.d/*

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# nginx 
curl  -o  /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo

一切的精简化
# 需要生成缓存吗?不用?为什么?  不需要去掉无用的操作
yum install vim net-tools nginx -y 

最后清空缓存,降低容器内资源的占用,最终这个容器会被提交为镜像文件,镜像文件是有体积的
yum clean all 


2.1 本地docker 登录 docker hub
[root@docker-200 ~]#docker login 
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: yuchao163
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

# 



2.2 推送本地镜像到 docker hub
得将镜像名,改为以 docker hub 账号开头的规则

# docker 入门镜像 hello-world

docker run hello-world  # 2个作用 1,下载镜像 2. 创建容器空间,执行镜像内容
[root@docker-200 ~]#docker tag  hello-world:latest   yuchao163/0224-hello-docker

[root@docker-200 ~]#docker push yuchao163/0224-hello-docker
Using default tag: latest
The push refers to repository [docker.io/yuchao163/0224-hello-docker]
e07ee1baac5f: Mounted from library/hello-world 
latest: digest: sha256:f54a58bc1aac5ea1a25d796ae155dc228b3f0e11d046ae276b39c4bf2f13d8c4 size: 525
[root@docker-200 ~]#


# 推送本地镜像到,docker hub自己的账号仓库,看懂1111

# 能不能下载?
# 先删除本地镜像
[root@docker-200 ~]#docker rmi feb5d9fea6a5
Untagged: yuchao163/0224-hello-docker:latest
Untagged: yuchao163/0224-hello-docker@sha256:f54a58bc1aac5ea1a25d796ae155dc228b3f0e11d046ae276b39c4bf2f13d8c4
Deleted: sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412
Deleted: sha256:e07ee1baac5fae6a26f30cabfe54a36d3402f96afda318fe0a96cec4ca393359
[root@docker-200 ~]## 看懂先删除  和镜像依赖的容器记录,才能删除镜像,刷777
[root@docker-200 ~]#
[root@docker-200 ~]#

# 然后再下载docker hub的镜像
docker pull yuchao163/0224-hello-docker:latest
# 再次运行dockerhub,私有账号下的镜像
[root@docker-200 ~]#docker run yuchao163/0224-hello-docker

docker容器使用和镜像推送

# 在容器里打开nginx ,并且访问
容器内的地址是 172.17.0.2  ---用ifconfig 命令查看

# 宿主机和容器进行通信
看到403发现权限不足

在这里插入图片描述

cd /usr/share/nginx/html

# 把它自带的都删掉,创建一个index.html 的文件

到此就创建了一个携带 vim net-tools nginx的容器

[root@docker-100 docker]# curl  172.17.0.2

good good study
day day up
[root@docker-100 docker]# 

我们测试了具体也可以访问了
只要容器记录还在,数据就不会丢。


# 提交容器记录,生成新的镜像记录。

docker commit 命令

# 提交容器记录,生成新的镜像记录
docker commit 42692f009ec0 nginx_net-tools

[root@docker-100 ~]# docker commit 42692f009ec0 nginx_net-tools
sha256:ad965313cc19555f900f9a5447859c2ba0b6aa3425eee19714277fe8716aea90


# 2.查看新的镜像的记录
[root@docker-100 ~]# docker images nginx_net-tools
REPOSITORY        TAG       IMAGE ID       CREATED              SIZE
nginx_net-tools   latest    ad965313cc19   About a minute ago   592MB
[root@docker-100 ~]# 



# 3,基于这个镜像去运行一个nginx程序
方式1 先进入这个容器运行一个nginx.
方式2 直接运行这个nginx

手工前台运行

docker run -it nginx_net-tools  bash 

[root@docker-100 ~]# docker run -it nginx_net-tools  bash 

#前台运行
nginx -g "daemon off;"


# 进入一个容器内且执行bash,开启bash交互式的环境。
docker exec -it 容器记录id bash


在这里插入图片描述

基于自定义的镜像,nginx + vim +netools
运行容器,在容器内运行一个前台运行的nginx,并且可以访问了,看到我们提交的数据,
good good study

直接在宿主机上启动nginx(重要)

docker run -d -p 80:80 nginx_net-tools nginx -g "daemon off;"

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

查看自定义的镜像,运行后容器的内容,以及端口映射的结果

构建一个镜像,可以发布多个环境看到day day up

在本地多次的运行
# -p  (小写) 端口的映射关系, 宿主机: 肉体年起内暴露的端口
# -P  (大写) 随机给宿主机暴露一个端口,且要求容器默认声明自己打开了什么端口。


1.先清空机器上的记录
[root@docker-100 ~]# docker stop `docker ps -aq`
8e7a46c92082
9dc0deaf22f3
[root@docker-100 ~]# docker rm `docker ps -aq`
8e7a46c92082
9dc0deaf22f3

# 打开的端口映射 宿主机:容器
81 , 82, 83

[root@docker-100 ~]# docker run -d -p 81:80 nginx_net-tools nginx -g "daemon off;"
c57436a1565c9fa2ed2e99ce4a222d4616e370f6967b1f56472043aa963b33dc
[root@docker-100 ~]# docker run -d -p 82:80 nginx_net-tools nginx -g "daemon off;"
d1b016f69c84d0fdceb992fb16530aaf170bdb5052057ce21a7ae03090f03c96
[root@docker-100 ~]# docker run -d -p 83:80 nginx_net-tools nginx -g "daemon off;"
3991c884116fbbff437dab963ee895a7b3c5ab668a241e69d8258fb6dc8794d1

在这里插入图片描述


镜像的共享

1. 提交到镜像仓库

2,本地的导出(语法)
docker save [镜像的名字] > 绝对路径

[root@docker-100 ~]# docker save nginx_net-tools > /opt/image_nginx.tar


3.发给目标机器docker-101 
用scp 命令 把100机器的发送到101机器上

docker load < image_nginx.tar 


基于dockerhub 公开仓库提供下载

https://hub.docker.com/
注册账密,即可登录

# 登录
docker login

# 推送
docker push 镜像的名字



# 机器远程下载镜像
docker pull 你的仓库的的连接

# 运行你所下载的镜像。

完结撒花🌸🌸🌸🌸🌸🌸🌸🌸🌸

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值