宿主机环境:RockyLinux 9
这个章节不小心搞成命令学习了,后面在整理成原理吧
Docker生命周期
拉取并启动Nginx容器
# 查找镜像 例如:nginx
[root@192 ~]# docker search nginx
我们可以看到,第一个时官方认证构建的nginx
# 拉取下载镜像 docker pull nignx,这个和git很像,git pull xxx
[root@192 ~]# docker pull nginx
如下,这里我们使用的是简单的pull操作,默认下载的是最新版本 latest
拉取镜像后查看镜像列表
运行该nginx镜像,创建一个具体的容器,然后在这个容器中,就跑着一个nginx服务了
# 运行镜像的命令,格式:docker run 参数 镜像的名字/ID
# -d:后台运行容器,-p:端口映射,宿主机端口:容器内端口,
# 当我们访问宿主机端口时,也就时访问容器内的端口
[root@192 ~]# docker run -d -p 80:80 nginx
#在我们运行完容器后,会返回一个容器ID
[root@192 ~]# docker run -d -p 80:80 nginx
870be1725361eb35588a55641b9637f6b395741ad642e6afeeeda2edbd23c5c3
执行命令 docker ps 我们可以查看到当前的容器列表,此时能看到容器80端口已经映射到宿主机上面了
在浏览器访问宿主机的80端口,就能看到容器内80端口运行的是什么
查看宿主机的网络配置,能够看到80端口,这里显示进程名称的并不是nginx,而是docker-proxy,这是docker启动的代理程序,将宿主机的80端口,代理到容器内的80端口
停止容器,docker stop 容器ID,停止容器后再去docker ps查看容器,之前的nginx已经没有了
进入正在运行的容器内,查看容器的运行系统,执行命令:docker exec -it 容器ID bash
Docker命令学习
# 默认的docker仓库是dockerhub,有大量优质的镜像,以及用户自己上传的镜像
[root@192 ~]# docker search 镜像名:tag,tag就是具体的标签版本
# 查看当前docker版本:
[root@192 ~]# docker version
#查看当前docker镜像文件:
[root@192 ~]# docker images 或 docker image ls
# 查看当前docker运行中的容器:
[root@192 ~]# docker ps
# 下载docker镜像:
docker pull 镜像名, # 默认的是 latest,
# 还可以指定版本
[root@192 ~]# docker pull 镜像名:版本号
# 查看docker服务信息
[root@192 ~]# docker info
# 查看docker的数据目录
[root@192 etc]# docker info | grep Root
Docker Root Dir: /var/lib/docker
[root@192 ~]# ls /var/lib/docker
buildkit containers engine-id image network overlay2 plugins runtimes swarm tmp volumes
# 存放docker镜像文件的目录
[root@192 sha256]# ll /var/lib/docker/image/overlay2/imagedb/content/sha256
total 8
-rw------- 1 root root 8149 Jul 29 08:50 89da1fb6dcb964dd35c3f41b7b93ffc35eaf20bc61f2e1335fea710a18424287
[root@192 sha256]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 89da1fb6dcb9 24 hours ago 187MB
# 当我们查看镜像文件时,可以看到是JSON数据类型的文件,其作用是记录 镜像和容器的配置关系
[root@192 sha256]# cat 89da1fb6dcb964dd35c3f41b7b93ffc35eaf20bc61f2e1335fea710a18424287
#-it:开启一个交互式的终端, --rm 容器退出时删除该容器
[root@192 sha256]# docker run -it --rm --name nginx01 nginx bash
# 查看镜像列表
[root@192 sha256]# docker images
# 查看某个镜像信息
[root@192 sha256]# docker images nginx
# 查看某个镜像信息,具体到某个tag
[root@192 sha256]# docker images nginx:tag名
# 格式化显示镜像列表,--format后跟docker的模板语言
[root@192 sha256]# docker images --format "{{.ID}}--{{.Repository}}"
# 以表格形式显示镜像信息
[root@192 sha256]# docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"
# 下载镜像
[root@192 sha256]# docker run hello-world
# 查看当前镜像信息
[root@192 sha256]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 89da1fb6dcb9 24 hours ago 187MB
hello-world latest 9c7a54a9a43c 2 months ago 13.3kB
# 删除镜像:名称、ID
[root@192 sha256]# docker rmi hello-world
[root@192 sha256]# docker rmi 9c7a54a9a43c
# 导出镜像,并重定向至/opt目录
[root@192 sha256]# docker image save nginx > /opt/nginx001.taz
[root@192 sha256]# ls /opt/
containerd nginx001.taz
# 导入镜像
[root@192 opt]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
[root@192 opt]# docker image load -i /opt/nginx001.taz
c6e34807c2d5: Loading layer [==================================================>] 77.81MB/77.81MB
24ee1d7d6a62: Loading layer [==================================================>] 113.2MB/113.2MB
4deafab383fa: Loading layer [==================================================>] 3.584kB/3.584kB
8aedfcd777c7: Loading layer [==================================================>] 4.608kB/4.608kB
c88d3a8ff009: Loading layer [==================================================>] 2.56kB/2.56kB
abc3beec4b30: Loading layer [==================================================>] 5.12kB/5.12kB
922d16116201: Loading layer [==================================================>] 7.168kB/7.168kB
Loaded image: nginx:latest
[root@192 opt]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 89da1fb6dcb9 25 hours ago 187MB
# 查看docker镜像详细信息
[root@192 opt]# docker image inspect 镜像ID
Docker容器管理
# docker run 镜像名,如果镜像不存在本地,则会在线区下载镜像
# 容器内的进程必须处于前台运行状态,否则容器就会直接退出
# 运行容器,切进入容器内
[root@192 ~]# docker run -it nginx bash
# 查看docker容器的运行日志
[root@192 ~]# docker logs 容器ID
# -f 实时打印日期
[root@192 ~]# docker logs -f 容器ID
# 使用管道符,查看最新的5条日志
[root@192 ~]# docker logs 容器ID| tail -5
# 进入到正在运行的容器内
[root@192 ~]# docker exec -it 容器ID bash
# 查看容器的详细信息
[root@192 ~]# docker container inspect 容器ID
# 后台运行docker容器,容器名称为nginx001,且端口映射宿主机的85端口,访问到容器内的80端口
[root@192 ~]# docker run -d -p 85:80 --name nginx001 nginx
6627aa9383d993ed1be7031841daf7cecaefadea8cf1ea678fd3b8121aed2c15
[root@192 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6627aa9383d9 nginx "/docker-entrypoint.…" 8 seconds ago Up 8 seconds 0.0.0.0:85->80/tcp, :::85->80/tcp nginx001
[root@192 ~]# docker port 6627aa9383d9
80/tcp -> 0.0.0.0:85
80/tcp -> [::]:85
# docker 容器提交
[root@192 ~]# docker commit 6627aa9383d9 nginx_hunter
sha256:53807fe50cade428944877195e5db131a0868052770f0b393d424f14fbe3ba03
[root@192 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx_hunter latest 53807fe50cad 5 seconds ago 187MB
nginx latest 89da1fb6dcb9 25 hours ago 187MB