day101 初体验docker的玩法

day101 初体验docker的玩法

容器的本质

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

搜索镜象

docker search 镜像名
docker search redis 

docker search wordpress 

# 在搜素一个ubantu系统
{
  "registry-mirrors": ["https://42240640f9ff42f692a2468126dfdf90.mirror.swr.myhuaweicloud.com",
  "https://docker.xuanyuan.me",
  "https://docker.1ms.run"]
}


停止容器,记录

[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 

看到了许多的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
# 查看容器的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


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

容器,下载多个发行版的环境 (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  

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

进入一个centos7.9的环境

yum install jq -y

curl -s https://registry.hub.docker.com/v1/repositories/centos/tags  |   jq


[root@docker-100 ~]# docker pull centos:7.9.2009
7.9.2009: Pulling from library/centos
2d473b07cdd5: Pull complete 
Digest: sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4
Status: Downloaded newer image for centos:7.9.2009
docker.io/library/centos:7.9.2009


# 再下一个 centos7.4.1708

自定义一个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

posted @ 2025-05-15 15:30  国家一级冲浪yzk  阅读(19)  评论(0)    收藏  举报