docker常用容器镜像等命令和操作---教程手册

引:

附上官方docker架构图:

 

 

 client客户端:操作——>发送请求命令

DockerdeamonDocker引擎,解析客户端发送的命令

images:镜像,一些特殊的文件叠加而成。镜像(Image)就是一堆只读层(read-only layer)的统一视角。镜像是创建容器的基石【。。。。最简单理解docker镜像相当于虚拟机镜像(操作系统 .iso文件)】

contains:docker容器是由docker镜像创建的运行实例。。。容器是一堆读写层(read-write layer)的统一视角。。容器(container)的定义和镜像(image)几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。。。【最简单理解docker容器相当于用镜像创建好的虚拟机本身   】

运行态容器(running container):一个可读写的统一文件系统  加上  隔离的进程空间和包含其中的进程

registy: 镜像仓库, docker hub 中的镜像,可拉取下来使用

容器 = 镜像 + 读写层

-------(笔者不推荐使用最简单理解,除非确实对于docker镜像和容器无法领会概念,且使用过VMware等虚拟机软件,可以简单将虚拟机和docker两种虚拟化技术进行类比,其实概念不完全相同)
理解Docker原理,关键一点是理解docker 的统一文件系统 , 


理解容器和镜像推荐链接:  http://dockone.io/article/783

 

一、docker引擎服务启停、重启

# 开启
systemctl start docker

# 重启
systemctl restart docker

# 停止
systemctl stop docker

# 查看状态
systemctl status docker

 

  附:配置docker镜像加速器,  https://yeasy.gitbook.io/docker_practice/install/mirror

注意配置完镜像加速器需要重启: 

sudo systemctl daemon-reload
sudo systemctl restart docker

 

二、docker镜像相关命令

# 列出镜像, (该命令中镜像大小为,解压后的大小)
docker images

# 拉取镜像, 尖括号中为参数,镜像名称,本例中拉取python3.6镜像
docker pull <python:3.6>

# 查看仓库中是否有某镜像
docker search

# 删除镜像(注意删除容器为rm, 删除镜像为rmi), 可删除多个
docker rmi <镜像名称或者id>  <镜像名称或者镜像id> ...

 

三、docker容器相关命令 

# 创建容器 (run相当于create + start)
docker  run  [options]   image  [command] [arg...]

#例: docker run  -it  --name=c1  centos  /bin/bash
# -i : 交互式容器 (前台运行) 
# -d:守护式容器,(后台运行)
# -t : 分配一个tty终端,来操作容器
# --name:  指定容器名称, 唯一、不能重复


# 查看正在运行中的容器
docker ps
# 查看所有容器
docker ps -a 
docker ps -l  (查看最后一次运行的容器) 
# 登录进入容器中
docker  exec  -it  <容器名称或id>  /bin/bash

# 停止容器
docker stop <容器名称或id>

# 启动容器
docker start <容器名称/id>  <容器名称/id>

# 重启
docker restart <容器名称或id>


# 查看容器详细信息,, 此inspect命令后可加 format参数进行格式化输出和筛选输出
docker inspect <容器名称或id>

# 删除容器
docker rm <容器名称/ id>
docker rm `docker ps -a -q`

# 查看容器日志
docker logs <容器名称或id>

# 文件拷贝,, 拷贝入容器中,和从容器中拷贝出来均可
docker cp <需要拷贝的文件/目录>  <容器名称: 容器目录>
docker cp <容器名称: 容器目录>  <需要拷贝的文件/目录>

# 目录挂载: 创建容器时,可将宿主机和容器的目录进行映射,这样就可以通过修改宿主机的文件去影响容器
#          例如启动一个centos容器,宿主机的/test目录挂载到centos容器的/soft目录:
docker run -itd -v /test:/soft centos /bin/bash

 

四、制作Docker镜像

方法:1、docker commit构建 

     2、docker build + Dockerfile文件

 1、利用容器制作镜像

#1、 利用容器制作镜像(或者说利用基础镜像之后安装需要的包做成容器,再导出这个容器做成镜像)
docker  commit  [options]  container  [image_name:tag]

# 镜像打包
# 镜像打包
docker save -o  <输出路径> <镜像名称>
#eg: docker save -o /root/my_images/python.tar  mypython

# 导入打包好的镜像
docker load -i <打包好的镜像的路径>

## 容器打包与导入打包好的容器
# 容器打包:export    ,导入包好的容器:import 
docker export -o /root/my_container/python.tar my_python 
docker import python.tar my_python:least

 2、docker build构建镜像,使用Dockfile

  2-1:DSL语法,

    FROM          基础镜像

    MAINTAINER    维护者信息

    RUN       安装软件

    ADD        拷贝文件及解压工作

    WORKDIR     cd切换工作目录

    VOLUME    目录挂载

    EXPOSE     端口映射

    CMD            指定运行的命令

    ENV       设置环境变量

#eg:
# 基于镜像基础
FROM python:3.7
  
# 设置代码文件夹工作目录 /app
WORKDIR /app
  
# 复制当前代码文件到容器中 /app
ADD . /app
  
# 安装所需的包
RUN pip install -r requirements.txt
  
# Run app.py when the container launches
CMD ["python", "app.py"]

  2-2:根据Dockerfile生成容器,

#用docker build生成容器,使用rm删除中间产生的临时容器, 注意最后一定加".", 表示当前目录
docker build -t <contains_name>  --rm=true  .

 

五、Docker网络管理

  5.1  默认网络

# 查看docker默认网络
docker network ls

    docker中默认的三种网络为bridge、host、none, 其中容器创建时默认的为bridge方式,该方式经过配置,可与宿主机和外网通信。
(若在docker集群下,docker还提供了docker_gwbridge和ingress两种默认网络),

# 若需查看某个容器的网络配置,可用
docker inspect <contains name/id>

# 查看使用bridge网络驱动的容器, 可用
docker network inspect bridge

  5.2  自定义网络

# 例:创建一个基于bridge驱动的网络: my_net
docker network create --driver bridge my_net

# 例:使用pytyon镜像创建容器test_network时,指定网络为自定义的网络my_net
docker run -itd --name=test_network --network=my_net python

# 为容器my_contain另外添加一种默认的bridge网络管理方式,
docker network connect bridge my_contain

# 断开my_contain容器的bridge网络
docker network disconnect bridge my_contain

# 移除自定义网络my_net, 移除成功后会返回网络的名称
docker network rm my_net

   5.2  容器间的网络通信

  参考: https://www.huaweicloud.com/articles/9933f12e2049a03b02d1b4791e2b3f39.html

posted @ 2021-06-21 20:08  张Star  阅读(254)  评论(0编辑  收藏  举报