美文网首页
docker 基本使用

docker 基本使用

作者: 逍遥_yjz | 来源:发表于2021-09-28 20:54 被阅读0次

docker 使用

帮助命令:

docker version    #显示docker的版本信息
docker info       #显示docker的系统信息,包括镜像和容器的数量
docker命令--help   #帮助命令

镜像命令

docker images查看所有本地的主机上的镜像

 #解释
 REPOSITORY  镜像的仓库源
 TAG           镜像的标签
 IMAGE ID     镜像的
 idCREATED      镜像的创建时间
 SIZE          镜像的大小
 
 #可选项
 -a, --a11                 #列出所有镜像
 -q,--quiet               #只显示镜像的id

同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如 ubuntu 仓库源里,有 15.10、14.04 等多个不同的版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。

所以,我们如果要使用版本为15.10的ubuntu系统镜像来运行容器时,命令如下:

runoob@runoob:~$ docker run -t -i ubuntu:15.10 /bin/bash 
root@d77ccb2e5cca:/#

参数说明:

  • -i: 交互式操作。
  • -t: 终端。
  • ubuntu:15.10: 这是指用 ubuntu 15.10 版本镜像为基础来启动容器。
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

如果要使用版本为 14.04 的 ubuntu 系统镜像来运行容器时,命令如下:

runoob@runoob:~$ docker run -t -i ubuntu:14.04 /bin/bash 
root@39e968165990:/# 

如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像。

docker search 搜索镜像

image-20210927141316736

可选项,通过搜藏来过滤

--filter=STARS=3000 #搜索出来的镜像就是STARS大于3000的

[root@sd-vm-0002863 ~]# docker search mysql --filter=STARS=3000
NAME      DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql     MySQL is a widely used, open-source relation…   11470     [OK]       
mariadb   MariaDB Server is a high performing open sou…   4354      [OK]       

获取一个新的镜像

下载镜像docker pu1l 镜像名[:tag]

[root@sd-vm-0002863 ~]# docker pu1l mysq1
Using default tag: latest      #如果不写tag,默认就是latest
latest: Pu1ling from library /mysq1
5b54d594fba7: Pu1l complete    #分层下载,docker iamge的核心联合文件系统
07e7d6a8a868: Pu17 complete
abd946892310: Pu17 complete
dd8f4d07efa5: Pu17 complete
....

删除镜像

镜像删除使用 docker rmi 命令

[root]# docker rmi -f 镜像id   #删除指定的镜像
[root]# docker rmi -f 镜像id 镜像id 镜像id 镜像id  #删除多个镜像
[root]# docker rmi -f $(docker images -aq)#删除全部的镜像

删除镜像时,遇到一个小 bug

[root@sd-vm-0002863 makeMirror]# docker images
REPOSITORY              TAG              IMAGE ID       CREATED             SIZE
yu/centos7              zhuaYJ           2e9a4f24b361   About an hour ago   1.8GB
yjz/centos7             zhuaYJ           64ed56076ed8   3 hours ago         1.61GB

删除 yjz/centos7:zhuaYJ 镜像,使用命令

docker rmi -f 64ed56076ed8

报错:

Error response from daemon: conflict: unable to delete 64ed56076ed8 (cannot be forced) - image has dependent child images

解决方法:

docker rmi -f yjz/centos7:zhuaYJ

创建镜像

当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。

  • 1、从已经创建的容器中更新镜像,并且提交这个镜像
  • 2、使用 Dockerfile 指令来创建一个新的镜像

1. 更新镜像

更新镜像之前,先看看我已有的镜像:

image-20210927145709135

我们需要使用已有的镜像来创建一个容器。已有的镜像是:centos:centos7.5.1804

docker run -it --name zhuaYJ centos:centos7.5.1804 /bin/bash

在运行的容器内使用 一系列的安装程序运行的环境 命令进行更新。

在完成操作之后,输入**ctrl+q+p **命令来退出这个容器。

查看容器运行:

docker ps  

可以看到,此时 ID 为 df98b86d0305的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit 来提交容器副本。

docker commit -m="爬虫环境" -a="yu" df98b86d0305 yu/centos7:zhuaYJ

各个参数说明:

  • -m: 提交的描述信息
  • -a: 指定镜像作者
  • df98b86d0305:容器 ID
  • yu/centos7:zhuaYJ: 指定要创建的目标镜像名

我们可以使用 docker images 命令来查看我们的新镜像 yu/centos7:zhuaYJ

image-20210927201103350

使用我们的新镜像 yu/centos7 来启动一个容器

$ docker run -it yu/centos7:zhuaYJ /bin/bash

2. 构建镜像

我们使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。

[root@sd-vm-0002863 makeMirror]# cat Dockerfile 
FROM centos:centos7.5.1804

RUN  yum -y install wget gcc make openssl-devel bzip2-devel \
     expat-devel gdbm-devel readline-devel sqlite-devel \
     mysql-devel gcc-devel python-devel xz-devel

RUN  mkdir -p /home/python \
     &&wget -P /home/python https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz \
     &&tar -zxvf /home/python/Python-3.6.5.tgz -C /home/python \
     &&cd /home/python/Python-3.6.5 \
     &&./configure --prefix=/usr/local/python  &&  make && make install \
     &&ln -s /usr/local/python/bin/python3 /usr/bin/python3 \
     &&ln -s /usr/local/python/bin/pip3 /usr/bin/pip3 \
     &&rm -rf /home/python 

RUN yum install -y libSM-1.2.2-2.el7.x86_64 --setopt=protected_multilib=false
RUN yum install -y libXrender-0.9.10-1.el7.x86_64 --setopt=protected_multilib=false
RUN yum install -y libXext-1.3.3-3.el7.x86_64 --setopt=protected_multilib=false
ENV PATH="/usr/local/python/bin:$PATH"

WORKDIR /app
COPY ./requirements2.txt  /app
RUN /usr/bin/python3  -m pip install --upgrade pip\
    && pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple --no-cache-dir -r requirements2.txt \
    && pip3 install  https://github.com/OlafenwaMoses/ImageAI/releases/download/2.0.2/imageai-2.0.2-py3-none-any.whl
RUN sed -i "s/f.attrs\['backend'\].decode('utf8')/f.attrs['backend'].encode('utf-8').decode('utf8')/g" /usr/local/python/lib/python3.6/site-packages/keras/engine/saving.py\
    && sed -i "s/f.attrs\['keras_version'\].decode('utf8')/f.attrs['keras_version'].encode('utf-8').decode('utf8')/g" /usr/local/python/lib/python3.6/site-packages/keras/engine/saving.py
RUN yum install kde-l10n-Chinese -y && \
 yum install glibc-common -y && \
 localedef -c -f UTF-8 -i zh_CN zh_CN.utf8

ENV LC_ALL zh_CN.UTF-8

每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。

第一条FROM,指定使用哪个镜像源

RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。

然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。

docker build -f Dockerfile  -t yu/detection:centos7 .

参数说明:

  • -t :指定要创建的目标镜像名
  • . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

使用docker images 查看创建的镜像已经在列表中存在,镜像ID为30c03e9457df

[root@sd-vm-0002863 fs]# docker images
REPOSITORY              TAG              IMAGE ID       CREATED         SIZE
yu/detection            centos7          30c03e9457df   9 minutes ago   1.88GB
yu/centos7              zhuaYJ           2e9a4f24b361   3 hours ago     1.8GB
mycentos                cs_centos05      aca138064121   30 hours ago    1.77GB
python                  3.7              24f00312f661   2 weeks ago     903MB
continuumio/anaconda3   2020.11-alpine   8a4c5d6cd346   9 months ago    2.44GB
hello-world             latest           bf756fb1ae65   21 months ago   13.3kB
centos                  centos7.5.1804   cf49811e3cdb   2 years ago     200MB
purposefly/anaconda     latest           90550a2ddede   4 years ago     2.13GB

我们可以使用新的镜像来创建容器

docker run -it yu/detection:centos7 /bin/bash
# 或 下面是加端口号映射
docker run -it -p 5000:5000 yu/detection:centos7

从上面看到新镜像已经包含我们创建的用户 yu。

3. 设置镜像标签

我们可以使用 docker tag 命令,为镜像添加一个新的标签。

root@sd-vm-0002863 fs:~$ docker tag 30c03e9457df yu/detection:dev

docker tag 镜像ID,这里是 30c03e9457df,用户名称、镜像源名(repository name)和新的标签名(tag)。

使用 docker images 命令可以看到,ID为30c03e9457df的镜像多一个标签。

相当于复制了一份镜像

容器命令

获取镜像

如果我们本地没有 centos镜像,我们可以使用 docker pull 命令来载入 centos镜像:

$ docker pull centos:centos7.5.1804

启动容器

以下命令使用 centos 镜像启动一个容器,参数为以命令行模式进入该容器:

docker run [可选参数]image
#参数说明
--name="Name"   容器名字centos01 centos02,用来区分容器
-d              后台方式运行
-it             使用交互方式运行,进入容器查看内容
-p              指定容器的端口 -p 8080:8080
    -p  ip:主机端口:容器端口
    -p  主机端口:容器端口(常用)
    -p  容器端口
    容器端口
-P  随机指定端口

实例-测试:

# 测试,启动进入容器内部
[root@sd-vm-0002863 ~]# docker run -it centos:centos7.5.1804 /bin/bash
[root@0e5c2b05338b /]# ls  #查看容器内的centos,基础版本,很多命令都是不完善的!
bin  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

# 从容器退回主机
[root@0e5c2b05338b /]# exit
exit
[root@sd-vm-0002863 ~]# 

启动已停止运行的容器

查看所有的容器命令如下:

#docker ps命令
    #列出当前正在运行的容器

-a      #列出当前正在运行的容器+带出历史运行过的容器
-n=?    #显示最近创建的容器
-q      #只显示容器的编号
[root@sd-vm-0002863 ~]# docker ps -a
CONTAINER ID   IMAGE                   COMMAND                  CREATED          STATUS                      PORTS                                       NAMES
0e5c2b05338b   centos:centos7.5.1804   "/bin/bash"              22 minutes ago   Exited (0) 11 minutes ago                                               adoring_khayyam
[root@sd-vm-0002863 ~]# docker ps -aq
0e5c2b05338b

使用 docker start 启动一个已停止的容器:

$ docker start 0e5c2b05338b
[root@sd-vm-0002863 ~]#  docker start 0e5c2b05338b
0e5c2b05338b

停止一个容器

停止容器的命令如下:

$ docker stop <容器 ID>
[root@sd-vm-0002863 ~]# docker stop 0e5c2b05338b
0e5c2b05338b
$ docker kill <容器 ID>  # 强制停止容器

停止的容器可以通过 docker restart 重启:

$ docker restart <容器 ID>
image-20210928165844144

后台运行

在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式。

[root@sd-vm-0002863 ~]# docker run -itd --name myCentos7 centos:centos7.5.1804 /bin/bash
f9b697b06ef6ac07da5616cde7fe28427e5eedae4f98e679c61a528765a4a712
image-20210928170121720

注:加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec(下面会介绍到)。

退出容器

exit        # 直接容器停止并退出
ctrl + P+Q  # 容器不停止退出

删除容器

docker rm 容器id  #册除指定的容器,不能删除正在运行的容器,如果要强制删除rm -f
docker rm -f $(docker ps -aq)    #删除所有的容器
docker ps -a -q|xargs docker rm  #删除所有的容器

进入容器

在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:

  • docker attach
  • docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。

attach 命令

下面演示了使用 docker attach 命令。

[root@sd-vm-0002863 ~]# docker attach f9b697b06ef6
image-20210928172701885

注意: 如果从这个容器退出,会导致容器的停止。

exec 命令

下面演示了使用 docker exec 命令。

[root@sd-vm-0002863 ~]# docker exec -it f9b697b06ef6 /bin/bash
[root@f9b697b06ef6 /]# exit
exit
[root@sd-vm-0002863 ~]#

注意: 如果从这个容器退出,容器也会停止

----------如果想退出,容器不停止请使用:ctrl + P+Q

推荐大家使用 docker exec

更多参数说明请使用 docker exec --help 命令查看。

导出和导入容器

导出容器

如果要导出本地某个容器,可以使用 docker export 命令。

导出容器 f9b697b06ef6 快照到本地文件 centos7.2.tar。

[root@sd-vm-0002863 rongqi_tar]# docker export f9b697b06ef6 > centos7.2.tar
[root@sd-vm-0002863 rongqi_tar]# ls
centos7.2.tar

这样将导出容器快照到本地文件。

导入容器快照

可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件centos7.2.tar 导入到镜像 test/ubuntu:v1:

[root@sd-vm-0002863 rongqi_tar]# cat /**/rongqi_tar/centos7.2.tar | docker import - test/centos:7.2
sha256:f0edac5673848b61ea948ac09978b4d2937493507c1c21032f4e282f5772450c
# 查看一下
[root@sd-vm-0002863 rongqi_tar]# docker images
REPOSITORY              TAG              IMAGE ID       CREATED              SIZE
test/centos             7.2              f0edac567384   About a minute ago   314MB

此外,也可以通过指定 URL 或者某个目录来导入,例如:

$ docker import http://example.com/exampleimage.tgz example/imagerepo

常用其他命令

# 1.镜像
docker pull centos:centos7.5.1804  # 为镜像添加一个新的标签
docker images
docker rmi -f 镜像id   #删除指定的镜像
docker tag 30c03e9457df yu/detection:dev

# 2.容器
docker run -it --name zhuaYJ centos:centos7.5.1804 /bin/bash  # 后台运行
docker run -it yu/centos7:zhuaYJ /bin/bash  # 后台运行
docker run -itd --name myCentos7 centos:centos7.5.1804 /bin/bash # 但是不进入后台

exit        # 直接容器停止并退出
ctrl + P+Q  # 容器不停止退出

docker commit -m="爬虫环境" -a="yu" df98b86d0305 yu/centos7:zhuaYJ  # 更新镜像
docker build -f Dockerfile  -t yu/detection:centos7 .   # 构建镜像


docker stop <容器 ID>  # 停止容器
docker start <容器 ID>  # 启动容器
docker restart <容器 ID>  # 重启容器

# 删除容器
docker rm 容器id  #册除指定的容器,不能删除正在运行的容器,如果要强制删除rm -f
docker rm -f $(docker ps -aq)    #删除所有的容器
docker ps -a -q|xargs docker rm  #删除所有的容器

# 进入容器
docker exec -it f9b697b06ef6 /bin/bash

# 容器打包
docker export f9b697b06ef6 > centos7.2.tar  # 导出
cat /**/rongqi_tar/centos7.2.tar | docker import - test/centos:7.2 # 导入

# 3. 从容器内拷贝文件到主机上
docker cp 容器id:容器内路径 目的的主机路径 # 反之亦然
docker cp ./ana-centos/ 9434e87c6674:/app/

# 4. 查看日志
docker logs -f -t --tai1 容器,没有日志
docker logs -f  616d8365708e

# 5. 查询最后一次创建的容器
docker ps -l 

查看镜像的元数据
命令:

docker inspect 容器id
[root@sd-vm-0002863 rongqi_tar]# docker inspect f9b697b06ef6
[
    {
        "Id": "f9b697b06ef6ac07da5616cde7fe28427e5eedae4f98e679c61a528765a4a712",
        "Created": "2021-09-28T09:00:26.66510206Z",
        "Path": "/bin/bash",
        "Args": [],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 13442,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2021-09-28T09:29:09.791239858Z",
            "FinishedAt": "2021-09-28T09:26:29.821490536Z"
        },
        "Image": "sha256:cf49811e3cdb94cbdfd645f3888d7add06a315449cf2c7ca7b81c312f1e46c63",
        "ResolvConfPath": "/var/lib/docker/containers/f9b697b06ef6ac07da5616cde7fe28427e5eedae4f98e679c61a528765a4a712/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/f9b697b06ef6ac07da5616cde7fe28427e5eedae4f98e679c61a528765a4a712/hostname",
        "HostsPath": "/var/lib/docker/containers/f9b697b06ef6ac07da5616cde7fe28427e5eedae4f98e679c61a528765a4a712/hosts",
        "LogPath": "/var/lib/docker/containers/f9b697b06ef6ac07da5616cde7fe28427e5eedae4f98e679c61a528765a4a712/f9b697b06ef6ac07da5616cde7fe28427e5eedae4f98e679c61a528765a4a712-json.log",
        "Name": "/myCentos7",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "default",
            "PortBindings": {},
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "CgroupnsMode": "host",
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [

运行一个 web 应用

命令:

docker build -f Dockerfile  -t yu/detection:centos7 .
docker run -it -p 5000:5000 yu/detection:centos7

使用 docker ps 来查看我们正在运行的容器:

[root@sd-vm-0002863 rongqi_tar]# docker ps
CONTAINER ID   IMAGE                   COMMAND       CREATED        STATUS        PORTS                                       NAMES
f9b697b06ef6   centos:centos7.5.1804   "/bin/bash"   4 hours ago    Up 4 hours                                                myCentos7
616d8365708e   yu/detection:centos7    "/bin/bash"   24 hours ago   Up 24 hours   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   optimistic_bouman

这里多了端口信息。

PORTS
0.0.0.0:32769->5000/tcp

Docker 开放了 5000 端口,这时我们可以通过浏览器访问WEB应用

相关文章

  • docker入门基操~~~

    # Docker基本使用方式 - [Window 使用 Docker 创建lnmp环境 ](#introduct...

  • [docker]docker基本使用

    docker[Centos 7]: 个人理解的docker,核心为镜像和容器。docker可以运行在各大系统上,这...

  • docker的基本使用

    docker基本使用语法

  • Docker 实战总结

    目录 Docker简介 Docker优势 Docker基本概念 Docker安装使用 Docker常用命令 Doc...

  • docker基本使用

    操作容器 docker的启动有两种启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(s...

  • docker基本使用

    docker 安装就不说了 我直接是用的windows 的版本 在学习docker之前 要知道镜像 容器的关系 镜...

  • docker 基本使用

    登录指定仓库docker login -u 登录名 -p 密码 仓库地址 拉去镜像docker pull 镜像名称...

  • docker 基本使用

    https://help.aliyun.com/document_detail/51853.html?spm=51...

  • docker 基本使用

    确保机器已经安装了docker; 启动docker进程: 查看docker进程: 3.运行docker应用 使用以...

  • docker 基本使用

    Docker虚拟机常用命令 先更新软件包yum -y update 安装Docker虚拟机yum install ...

网友评论

      本文标题:docker 基本使用

      本文链接:https://www.haomeiwen.com/subject/jvrrnltx.html