简介:docker查看镜像,docker查看容器,docker运行某个容器, docker查看某个镜像的历史记录,通过dockerfile创建镜像
Docker镜像本质上是一个只读文件,这个文件包含了文件系统、源码、库文件、依赖、工具等一些运行应用所必须的文件。可以将其理解成一个模板,可以实例化出很多容器。
Docker镜像包括一个或者多个只读层,因此,镜像一旦被创建就再也不能被修改了。运行着的Docker容器是镜像的实例。从同一个镜像中运行的容器包含有相同的应用代码和运行时依赖。但是每个运行着的容器都有一个可写层,它位于底下的若干只读层之上。运行时的所有变化,包括对数据和文件的写和更新,都会保存在这个层中,因此,从同一个镜像运行的多个容器包含了不同的容器层。
1. 查看镜像列表
# 查看镜像列表
docker image ls
# 简写方式
docker images
2. 查看容器列表
# 查看当前正在运行的容器
docker container ls
# 简写方式
docker ps
# 查看运行的容器包括历史运行的容器
docker container ls -a
# 简写方式
docker ps -a
# 只返回容器的ID,只需要加上q参数即可
docker ps -aq
3. 删除镜像
docker rmi 镜像id或者镜像名
如果需要删除多个镜像可以使用空格分隔。例如:docker rmi nginx_img mysql_img
4. 运行某个container
4.1 运行某个容器
docker run ubuntu
4.2 以交互的方式运行某个容器
docker run -it ubuntu
注意:以交互式方式进入Ubuntu容器中安装扩展时,会报错。例如在安装vim时报 Unable to locate package vim 错误。这是因为刚刚从官网下载的Ubuntu容器是没有任何包索引的,因此该镜像中没有任何包索引信息。可以使用 apt-get update 更新包索引信息,然后再安装自己需要的包
4.3 以服务的形式运行某个容器
一般dockerfile中定义了CMD或者ENTRYPOINT命令。加参数 -d 表示以守护进程的方式运行
docker run -d 镜像名
4.4 设置运行容器的名称
docker run -d 镜像名 --name='容器的名称'
如果设置了名称,后期需要删除、停止容器时,可以通过名称进行删除
4.5 docker容器内的端口映射到本地
部署web服务器时,启动nginx容器后,怎么把nginx容器的端口映射到本地,允许本地可以直接访问呢?此时就可以使用 -p 参数将docker容器的端口映射到本地:
docker run -d 镜像名 --name='容器的名称' -p 80:80
4.6 设置环境变量
在启动容器时,设置系统环境变量
docker run -d 镜像名 --name='容器的名称' -e 环境变量名=变量的值
示例,设置redis的连接域名:docker run -d --name='hello_test1' hello_test -e REDIS_HOST=redis
4.7 设置volume名称
volum方式实现数据持久化时,通过-v参数设置volume数据持久化的名称,方便后期识别volume的作用
docker run -v volume名称:dockerfile定义的volume同步路径
4.8 bind mounting方式设置共享目录实现数据持久化
上面的volume实现的数据持久化,需要在dockerfile中设置持久化目录,但是启动容器时设置共享目录就不需要在dockerfile中定义volume:
docker run -d -v 本地目录:docker容器的目录
docker run 命令参数有很多,例如限制容器使用的内存,CPU,GPU等。具体的可以使用 docker run -h 查看
5. 进入运行中的容器中
当我们使用 run -d 的形式启动某个容器时,如果想要进入容器中查看运行状态、日志等信息时可以使用如下命令进入:
docker exec -it 容器ID /bin/bash
docker exec 是对运行中的容器执行某个命令。上面的案例就是利用它进入shell命令行,-it 是以交互的方式执行的意思。
除了上面的案例之外,还可以使用 docker exec 执行python命令。比如进入python的命令行:
docker exec -it 容器ID python
6. 停止某个运行中的容器
docker stop 容器id
容器id可以只写一部分,只要不与其他容器ID冲突即可
7. 删除容器
7.1 删除已停止的容器
docker rm 容器id
容器id可以是多个,多个容器id以空格分隔。
7.2 强制停止并删除正在运行的容器
docker rm -f 容器名或者容器id
8. 基于某个容器打包成一个新的镜像(此方式不推荐)
官方ubuntu进行是没有任何包索引信息也没有安装vim等基础包,如果不想每次都去安装可以在本地将已经安装基础包的容器打包成一个我们想要的镜像。命令格式如下:
# 打包某个容器成新的镜像
docker container commit 待打包的容器name 新镜像name
# 简写
docker commit 待打包的容器name 新镜像name
注意:建议新镜像name的格式:docker镜像网站的用户名 / 新镜像的名称
待打包的容器ID可以通过 docker ps -a 查看
9. 查看某个镜像的历史记录
# 通过镜像名查看历史记录
docker history 镜像名称
# 通过镜像ID查看历史记录
docker history 镜像ID
10. 通过dockerfile创建镜像(推荐)
通过某个容器打包新的镜像的方式,我们不推荐大家使用,存在很多不确定因素,很可能导致自己的服务器被黑客利用。而dockerfile就不一样了,内容透明化,可排除镜像中可能存在病毒的风险。打包命令:
docker build -t 新镜像的名称 dockerfile文件目录
注意:建议新镜像name的格式:docker镜像网站的用户名 / 新镜像的名称
如果自己有搭建私有docker hub服务器,build的时需要把 docker镜像网站的用户名 改成 私有服务器IP地址及端口号。否则后期无法将制作的镜像推送到私有的服务器上
dockerfile目录:如果是当前目录可以直接使用 . 表示
11. 拉取docker hub上的镜像到本地
docker pull 镜像名
12. 登录docker hub镜像网站
docker login
13. 推送本地镜像到docker hub上面
docker推送镜像到docker hub上时必须先登录,否则无法推送
docker push 镜像名:tag
注意:镜像名必须是【docker hub的用户/镜像名】的格式,否则无法推送。tag可以理解为分支名,类似于github的tag
例如:docker push cxx1123456/ubuntu-php:latest
如果推送的是私有的docker服务器,在推送之前需要在/etc/docker/daemon.json中添加安全IP信息。daemon.json格式:{"insecure-registries":["127.2.2.22:5000"]} 还需要在docker的systemctl的服务文件中添加:EnvironmentFile=/etc/docker/daemon.json ,下次启动docker时会自动加载配置
14. 查看某个容器信息
docker inspect 容器ID
可以查看docker 容器的创建时间、IP地址、映射端口等信息
15. 查看容器输出日志
运行容器中的程序可能输出一些日志信息,比如python中经常使用print()输出打印日志。如果想要查看这些打印信息可以通过如下命令查看:
docker logs 容器ID或者容器名
16. 查看docker使用了哪些网络
查看当前docker的网络列表:
docker network ls
如果想要查看某个网络被哪些容器使用,可以加上 inspect 查看:
docker network inspect 网络id或者网络名称
返回之中有一个Containers参数,这里面的就是使用当前网络的容器
17. volume数据持久化相关操作
17.1 查看volume列表
docker volume ls
17.2 删除volume
docker volume rm volume名称
17.3 查看某个volume详细信息
docker volume inspect volume名称
有遗漏或者不对的可以在我的公众号留言哦