当前位置:   article > 正文

docker安装和使用_docker24 sudo ./install.sh usage: ./install.sh

docker24 sudo ./install.sh usage: ./install.sh [option]

使用 APT 安装docker

docker安装和使用 

更新软件包索引

 sudo apt upgrade && sudo apt update

安装下载Docker的必要依赖

 sudo apt install apt-transport-https ca-certificates curl software-properties-common

把官方 Docker 版本库的 GPG 密钥添加到系统中

 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

将 Docker 版本库添加到APT源

 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"

用新添加的 Docker 软件包来进行升级更新

 sudo apt update

确保从 Docker 版本库,而不是默认的 Ubuntu 版本库进行安装

 sudo apt-cache policy docker-ce

  • 到目前这一步docker-ce还未安装,但根据上一步中的列表,可以看到 docker-ce 来自 Docker 官方版本库。

Docker的最终安装

 sudo apt install docker-ce

检查 Docker 是否正在运行

 sudo systemctl status docker

  • 至此,docker安装完成

附:语法格式和所有可用命令

Usage:  docker [OPTIONS] COMMAND

A self-sufficient runtime for containers

Options:
      --config string      Location of client config files (default
                           "/root/.docker")
  -c, --context string     Name of the context to use to connect to
                           the daemon (overrides DOCKER_HOST env var
                           and default context set with "docker
                           context use")
  -D, --debug              Enable debug mode
  -H, --host list          Daemon socket(s) to connect to
  -l, --log-level string   Set the logging level
                           ("debug"|"info"|"warn"|"error"|"fatal")
                           (default "info")
      --tls                Use TLS; implied by --tlsverify
      --tlscacert string   Trust certs signed only by this CA
                           (default "/root/.docker/ca.pem")
      --tlscert string     Path to TLS certificate file (default
                           "/root/.docker/cert.pem")
      --tlskey string      Path to TLS key file (default
                           "/root/.docker/key.pem")
      --tlsverify          Use TLS and verify the remote
  -v, --version            Print version information and quit

Management Commands:
  app*        Docker App (Docker Inc., v0.9.1-beta3)
  builder     Manage builds
  buildx*     Docker Buildx (Docker Inc., v0.8.2-docker)
  config      Manage Docker configs
  container   Manage containers
  context     Manage contexts
  image       Manage images
  manifest    Manage Docker image manifests and manifest lists
  network     Manage networks
  node        Manage Swarm nodes
  plugin      Manage plugins
  scan*       Docker Scan (Docker Inc., v0.17.0)
  secret      Manage Docker secrets
  service     Manage services
  stack       Manage Docker stacks
  swarm       Manage Swarm
  system      Manage Docker
  trust       Manage trust on Docker images
  volume      Manage volumes

Commands:
  attach      Attach local standard input, output, and error streams to a running container
  build       Build an image from a Dockerfile
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  diff        Inspect changes to files or directories on a container's filesystem
  events      Get real time events from the server
  exec        Run a command in a running container
  export      Export a container's filesystem as a tar archive
  history     Show the history of an image
  images      List images
  import      Import the contents from a tarball to create a filesystem image
  info        Display system-wide information
  inspect     Return low-level information on Docker objects
  kill        Kill one or more running containers
  load        Load an image from a tar archive or STDIN
  login       Log in to a Docker registry
  logout      Log out from a Docker registry
  logs        Fetch the logs of a container
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  ps          List containers
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  rmi         Remove one or more images
  run         Run a command in a new container
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  search      Search the Docker Hub for images
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  version     Show the Docker version information
  wait        Block until one or more containers stop, then print their exit codes

Run 'docker COMMAND --help' for more information on a command.

To get more help with docker, check out our guides at https://docs.docker.com/go/guides/
用法:docker [选项] 命令

A self-sufficient runtime for containers

选项:
      --config string      客户端配置文件的位置(默认
                           “/root/.docker”)
  -c, --context string     用于连接到守护程序的上下文名称 (覆盖 DOCKER_HOST env var
                          和使用“docker context use”设置的默认上下文)
  -D, --debug              启用调试模式
  -H, --host list          列出要连接的守护进程套接字
  -l, --log-level string   设置日志级别
                           ("debug"|"info"|"warn"|"error"|"fatal")
                           (默认 "info")
      --tls                使用 TLS; implied by --tlsverify
      --tlscacert string   仅信任该 CA 签名的信任证书
                           (default "/root/.docker/ca.pem")
      --tlscert string     TLS 证书文件的路径 (默认
                           "/root/.docker/cert.pem")
      --tlskey string      TLS 密钥文件的路径 (默认
                           "/root/.docker/key.pem")
      --tlsverify          使用 TLS 并验证远程
  -v, --version            打印版本信息并退出

Management Commands:
  app*        Docker 应用程序 (Docker Inc., v0.9.1-beta3)
  builder     管理构建
  buildx*     Docker 构建x (Docker Inc., v0.8.2-docker)
  config      管理 Docker 配置
  container   管理容器
  context     管理上下文
  image       管理图片
  manifest    管理 Docker 镜像清单和清单列表
  network     管理网络
  node        管理 Swarm 节点
  plugin      管理插件
  scan*       Docker 扫描 (Docker Inc., v0.17.0)
  secret      管理 Docker 密钥
  service     管理服务
  stack       管理 Docker 堆栈
  swarm       管理群
  system      管理 Docker
  trust       管理对 Docker 镜像的信任
  volume      管理卷

命令:
  attach      将本地标准输入、输出和错误流附加到正在运行的容器
  build       从 Dockerfile 构建镜像
  commit      提交容器的更改并以此创建新镜像
  cp          在容器和本地文件系统之间复制文件或文件夹
  create      创建一个新容器
  diff        检查容器文件系统上文件或目录的更改
  events      从服务器获取实时事件
  exec        在正在运行的容器中运行命令
  export      将容器的文件系统导出为 tar 存档
  history     显示镜像的历史
  images      列举镜像
  import      从 tarball 导入内容以创建文件系统镜像
  info        显示系统范围的信息
  inspect     返回有关 Docker 对象的低级信息
  kill        杀死一个或多个正在运行的容器进程
  load        从 tar 存档或 STDIN 加载镜像
  login       登录到 Docker 注册表
  logout      从 Docker 注册表中注销
  logs        获取容器的日志
  pause       暂停一个或多个容器内的所有进程
  port        列出端口映射或容器的特定映射
  ps          列出容器
  pull        从注册表中拉取镜像或存储库
  push        将镜像或存储库推送到注册表
  rename      重命名容器
  restart     重启一个或多个容器
  rm          移除一个或多个容器
  rmi         删除一个或多个镜像
  run         在新容器中运行命令
  save        将一个或多个图像保存到 tar 存档 (默认流式传输到 STDOUT)
  search      在 Docker Hub 中搜索镜像
  start       启动一个或多个停止的容器
  stats       显示容器资源使用统计的实时流
  stop        停止一个或多个正在运行的容器
  tag         创建一个引用 SOURCE_IMAGE 的标签 TARGET_IMAGE
  top         显示一个容器的运行进程
  unpause     取消暂停一个或多个容器中的所有进程
  update      更新一个或多个容器的配置
  version     显示 Docker 版本信息
  wait        等待阻塞,直到一个或多个容器停止,然后打印它们的退出代码
运行 'docker COMMAND --help' 以获取有关命令的更多信息。

要获得有关 docker 的更多帮助,请查看我们的指南 https://docs.docker.com/go/guides/

操作doccker镜像

  • 镜像是 Docker的一个核心概念,Docker 运行容器前需要本地存在对应的镜像,如果本地不存在该镜像,Docker 会从镜像仓库下载该镜像。

检查是否可以访问 Docker Hub 和从这个网站下载镜像

docker run hello-world

  • 得到以下结果,说明机器访问 Docker hub 一切顺畅

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:13e367d31ae85359f42d637adf6da428f76d75dc9afeb3c21faea0d976f5c651
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/
  • 执行此命令时,Docker 首先在本地查找hello-world,如没有,它会从 Docker Hub(默认版本库)下载了该镜像。下载镜像后,Docker 会根据镜像创建一个容器,并执行该容器中的应用程序。

通过search命令来搜索 Docker Hub 上可用的镜像

  • 例如搜索ubuntu的镜像

docker search ubuntu

  • 此命令会在 Docker Hub 上搜索并返回名称与搜索字符串匹配的所有镜像列表,其中,在OFFICIAL列为ok的镜像全部是出自于官方的镜像。

使用pull命令来把镜像下载到计算机

  • 例如把官方的ubuntu镜像下载到计算机

docker pull ubuntu

下载镜像后,可以用images命令来列举下载了哪些镜像

docker images

使用image rm或者rmi命令来删除已经下载的镜像

  • 例如删除刚才演示的hello-world镜像

docker image rm hello-world
或者
docker rmi hello-world

  • (在删除镜像前应该先删除该镜像所启动的容器,这个方法放在后面容器部分写)

  • 删除时可以使用镜像的短ID、长ID、镜像名或者镜像摘要

操作docker容器

  • 容器是 Docker 一个核心概念。简单的说,容器是独立运行的一个或一组应用,以及它们的运行态环境。对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用。

容器启动(两种方式)

  • 启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(exited)的容器重新启动。

使用run命令来新建启动

  • 例如基于本地的ubuntu镜像新建一个容器并启动,输出一个 “Hello World”,之后终止容器

 docker run ubuntu /bin/echo 'Hello world'

  • 这和直接在本地运行 /bin/echo 'Hello world'几乎没有区别

  • 下面的命令会启动一个 bash 终端,允许用户进行交互。

docker run -t -i ubuntu /bin/bash

  • 可以看到设备名从ubuntu-local变成了容器的id:3afd9924415f,这个交互界面就是容器的交互界面

当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:

  • 检查本地是否存在指定的镜像,不存在就从Docker Hub下载

  • 利用镜像创建并启动一个容器

  • 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层

  • 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去

  • 从地址池配置一个 ip 地址给容器

  • 执行用户指定的应用程序

  • 执行完毕后容器被终止

使用container start来启动已终止的容器

  • 例如直接将一个已经终止的运行过ubuntu镜像的容器启动运行

docker container start 3afd9924415f

  • 这里我们使用ps命令来验证这个容器是否运行(ps命令在后文)

  • 可以看到用这个指令启动的容器不会自动被关闭

使用container stop来终止容器

  • 例如终止正在运行的3afd9924415f容器

docker container stop 3afd9924415f

使用 -d 参数来守护态运行一个容器

  • 更多的时候,需要让 Docker 在后台运行而不是直接把执行命令的结果输出在当前宿主机下。此时,可以通过添加 -d 参数来实现。

  • 例如不使用 -d参数运行容器

docker run ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"

  • 这里容器把输出结果直接打印到了宿主机上

  • 例如使用了 -d参数运行容器

docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"

 

  • 此时容器会在后台运行并不会把输出的结果 (STDOUT) 打印到宿主机上面(输出结果可以用 docker logs 查看)。

注: 容器是否会长久运行,是和 docker run 指定的命令有关,和 -d 参数无关。

  • 使用 -d 参数启动后会返回一个唯一的 id,可以通过ps命令查看容器,也可以通过 container ls 命令来查看容器信息。

进入正在运行的容器

  • 在使用 -d 参数时,容器启动后会进入后台。

    某些时候需要进入容器进行操作,可以使用 attach 命令或 exec 命令

attach命令进入正在运行的容器(两种方式)

  • 例如进入前面以守护态运行的容器

docker attach 900538299d44

 

  • 如果从这个 stdin 中 exit,会导致容器的停止。

exec 命令进入正在运行的容器

  • exec 命令边可以跟多个参数,例如-i -t 参数

  • 只用 -i 参数时,由于没有分配伪终端,界面没有我们熟悉的 Linux 命令提示符,但命令执行结果仍然可以返回。

  • -i -t 参数一起使用时,则可以看到我们熟悉的 Linux 命令提示符。

 

  • 如果从这个 stdin 中 exit,不会导致容器的停止。

使用export命令导出容器快照为本地文件

  • 例如导出前文中900538299d44编号的容器快照为HelloWorld.tar

docker export 900538299d44 > HelloWorld.tar

使用import命令导入容器快照为镜像

  • 例如导出前文中名为HelloWorld.tar的本地容器快照文件为test/helloworld

cat HelloWorld.tar | docker import -  test/helloworld

使用container ls -a命令查看所有容器(包括已终止的)

docker container ls -a

删除容器(两种方式)

使用 container rm 来删除一个处于终止状态的容器

  • 例如删除id为695795f49260的容器

docker container rm 695795f49260

使用container prune命令来清除所有处于终止状态的容器

docker container prune

以一个apache服务器为例说明如何利用 commit 理解镜像构成

  • commit 命令除了学习之外,还有一些特殊的应用场合,比如被入侵后保存现场等。但是,不要使用 docker commit 定制镜像,定制镜像应该使用 Dockerfile 来完成

  • 启动一个命名为webserver的容器,并且映射了 80 端口,这样就可以直接去访问这个容器里的apache服务器

docker run --name webserver -d -p 80:80 httpd

  • 本地可以访问容器

 

  • 现在,假设我们非常不喜欢这个页面,我们希望改成helloworld,我们可以使用 exec 命令进入容器,修改其内容。

docker exec -it webserver bash
echo '<h1>Hello, World!</h1>' > /usr/local/apache2/htdocs/index.html

  • 刷新网页,我们可以看见网页内容改变了

  • 我们修改了容器的文件,也就是改动了容器的存储层。我们可以通过 diff 命令看到具体的改动。

docker diff webserver

  • 现在我们定制好了变化,我们希望能将其保存下来形成镜像。当我们运行一个容器的时候(如果不使用卷的话),我们做的任何文件修改都会被记录于容器存储层里。而 Docker 提供了一个 commit 命令,可以将容器的存储层保存下来成为镜像。换句话说,就是在原有镜像的基础上,再叠加上容器的存储层,并构成新的镜像。以后我们运行这个新镜像的时候,就会拥有原有容器最后的文件变化,这个命令的语法格式是:

docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]
  • 我们可以用下面的命令将容器保存为镜像

docker commit --author "JasonCian" --message "修改了默认网页" webserver httpd:new

  • 其中 --author 是指定修改的作者,而 --message 则是记录本次修改的内容。这点和 git 版本控制相似,不过这些信息其实可以省略留空。

  • 我们可以在 docker image ls 中看到这个新定制的镜像

  • 我们还可以用 docker history 具体查看镜像内的历史记录,我们会发现新增了我们刚刚提交的这一层。

docker history httpd:new

 

  • 新的镜像定制好后,我们可以来运行这个镜像。

docker run --name websever2 -d -p 81:80 httpd:new

  • 我们新的容器绑定了81端口,如果访问这个页面的话应该与修改后的 webserver 一样

  • 至此,我们第一次完成了定制镜像,使用的是 docker commit 命令,手动操作给旧的镜像添加了新的一层,形成新的镜像,对镜像多层存储有了更直观的感觉。

警告:commit指令导致黑箱操作

  • 使用 docker commit 命令虽然可以比较直观的帮助理解镜像分层存储的概念,但是实际环境中并不会这样使用。

  • 首先,如果仔细观察之前的 docker diff webserver 的结果,你会发现除了真正想要修改的 /usr/local/apache2/htdocs/index.html 文件外,由于命令的执行,还有很多文件被改动或添加了。这还仅仅是最简单的操作,如果是安装软件包、编译构建,那会有大量的无关内容被添加进来,将会导致镜像极为臃肿。

  • 此外,使用 docker commit 意味着所有对镜像的操作都是黑箱操作,生成的镜像也被称为 黑箱镜像,换句话说,就是除了制作镜像的人知道执行过什么命令、怎么生成的镜像,别人根本无从得知。而且,即使是这个制作镜像的人,过一段时间后也无法记清具体的操作。这种黑箱镜像的维护工作是非常痛苦的。

dockerfile创建一个简单apache服务器

  • 在一个空白目录中,建立一个文本文件,并命名为 Dockerfile

  • Dockerfile的内容为:

FROM httpd
RUN echo '<h1>Hello, World!</h1>' > /usr/local/apache2/htdocs/index.html

  • 这个 Dockerfile 很简单,一共就两行。涉及到了两条指令,FROMRUN

FROM 指定基础镜像

  • 定制镜像一定是以一个镜像为基础,在其上进行定制。就像我们之前运行了一个 httpd 镜像的容器,再进行修改一样,基础镜像是必须指定的。而 FROM 就是指定 基础镜像,因此一个 DockerfileFROM 是必备的指令,并且必须是第一条指令。

  • Docker Hub 上有非常多的高质量的官方镜像,有可以直接拿来使用的服务类的镜像,如 nginxredismongomysqlhttpdphptomcat 等;也有一些方便开发、构建、运行各种语言应用的镜像,如 nodeopenjdkpythonrubygolang 等。可以在其中寻找一个最符合我们最终目标的镜像为基础镜像进行定制。

  • 如果没有找到对应服务的镜像,官方镜像中还提供了一些更为基础的操作系统镜像,如 ubuntudebiancentosfedoraalpine 等,这些操作系统的软件库为我们提供了更广阔的扩展空间。

  • 除了选择现有镜像为基础镜像外,Docker 还存在一个特殊的镜像,名为 scratch。这个镜像是虚拟的概念,并不实际存在,它表示一个空白的镜像。

  • scratch 为基础镜像的话,意味着你不以任何镜像为基础,接下来所写的指令将作为镜像第一层开始存在。

RUN 执行命令

  • RUN 指令是用来执行命令行命令的。由于命令行的强大能力,RUN 指令在定制镜像时是最常用的指令之一。其格式有两种:

    • shell 格式:RUN <命令>,就像直接在命令行中输入的命令一样。刚才写的 Dockerfile 中的 RUN 指令就是这种格式。

    RUN echo '<h1>Hello, World!</h1>' > /usr/local/apache2/htdocs/index.html

    • exec 格式:RUN ["可执行文件", "参数1", "参数2"],这更像是函数调用中的格式,例如

    RUN apt-get update

构建镜像

  • 例如我们要用刚才的Dockerfile 构建一个叫helloworld:apache的镜像,就需要在 Dockerfile 文件所在目录执行以下指令

docker build -t helloworld:apache .

  • 从命令的输出结果中,我们可以清晰的看到镜像的构建过程。在 Step 2 中,如同我们之前所说的那样,RUN 指令启动了一个容器 82680b886e98,执行了所要求的命令,并最后提交了这一层 d8ce094d2420,随后删除了所用到的这个容器 82680b886e98

  • 这里我们使用了 build 命令进行镜像构建。其格式为:

docker build [选项] <上下文路径/URL/->
  • 如果注意,会看到 docker build 命令最后有一个 .表示当前目录.

  • 当构建的时候,用户会指定构建镜像上下文的路径,docker build 命令得知这个路径后,会将路径下的所有内容打包,然后上传给 Docker 引擎。这样 Docker 引擎收到这个上下文包后,展开就会获得构建镜像所需的一切文件。

运行构建好的helloworld:apache镜像

docker run --name websever -d -p 81:80 helloworld:apache

用浏览器验证一下

安装portainer图形化界面

docker容器启动

docker run -d -p 8080:9000 \
--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

浏览器访问管理界面

  • 创建好账户就可以进行图形化管理docker了

最后在这里再推荐一下宝塔面板也有管理docker的功能:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/139792
推荐阅读
相关标签
  

闽ICP备14008679号