前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Docker 学习历程(一)

Docker 学习历程(一)

作者头像
Innei
发布2021-12-28 14:25:53
发布2021-12-28 14:25:53
28100
代码可运行
举报
文章被收录于专栏:静之森静之森
运行总次数:0
代码可运行

前几天看到 Arch 上的 pacman 非常的好用,但是我在安装 Manjaro 遇到了很多问题。所以就在服务器上尝试一下 Arch。使用 Docker 可以在任意 Linux 内核上运行其他 Linux 发行版。使用 Docker,可以让应用的部署、测试和分发都变得前所未有的高效和轻松!

开始前的准备

我的服务器是 Ubuntu,所以首先安装 Docker。

bash

代码语言:javascript
代码运行次数:0
复制
1apt install docker

COPY

基本命令

  • 拉取 Arch 镜像。

bash

代码语言:javascript
代码运行次数:0
复制
1docker pull archlinux/base

COPY

这样就把 Arch 的存储到了本地,可以通过 docker image list 查看所有的本地镜像。

bash

代码语言:javascript
代码运行次数:0
复制
1root@lnmp:~/docker# docker image list
2REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
3arch                v1                  9a4034dda227        3 hours ago         594MB
4<none>              <none>              20b81ab423c2        3 hours ago         458MB
5nginx               latest              f68d6e55e065        4 days ago          109MB
6archlinux/base      latest              98e93880f9b1        4 days ago          458MB
7bash                latest              417531d957ab        8 weeks ago         15.2MB

COPY

  • 启动一个 Docker 容器

docker run 启动一个 Docker 容器。

在此之前了解镜像和容器之间的关系。

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

bash

代码语言:javascript
代码运行次数:0
复制
1docker run -it --name arch archlinux/base

COPY

-i 是交互模式,-t是开始一个 tty。--name给这个容器命名。后面紧跟着镜像名。

然后将会进入 Arch 的 tty 字符终端。

除此之外,常用的参数还有-d后台运行。

从后台进入容器的 tty 终端则可以用,docker exec -it arch bash

arch是之前的命名,bash是容器内的命令。这里打开一个 shell。

  • 查看容器运行状态

docker ps -a 表示查看所有的容器状态。

bash

代码语言:javascript
代码运行次数:0
复制
1root@lnmp:~/hugo/quickstart# docker ps -a
2CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
372e8ede0f2c8        archlinux/base      "/usr/bin/bash"          13 seconds ago      Up 12 seconds                              arch
402243150a4a8        archlinux/base      "--name arch"            7 minutes ago       Created                                    reverent_wing
5d44d03201e87        nginx               "nginx -g 'daemon of…"   15 minutes ago      Up 15 minutes       0.0.0.0:8080->80/tcp   web

COPY

  • 删除一个容器

docker rm 3dd93022c1b2,后面的是容器的 ID,或者名字。

  • 停止一个容器

docker stop arch,也是跟的 ID 或者名字。启动自然不用说了。

  • 保存一个容器至镜像

为什么要保存为镜像?

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

使用 docker commitgit commit 一样加入版本库。

bash

代码语言:javascript
代码运行次数:0
复制
1root@lnmp:~# docker commit --author "Innei" --message "init" a2 arch:v1
2sha256:9a4034dda227606da0e621fd448d741d1e4b28137a65069575bccf823581bd65

COPY

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

bash

代码语言:javascript
代码运行次数:0
复制
1root@lnmp:~/docker# docker image list
2REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
3arch                v1                  9a4034dda227        3 hours ago         594MB
4<none>              <none>              20b81ab423c2        4 hours ago         458MB
5nginx               latest              f68d6e55e065        4 days ago          109MB
6archlinux/base      latest              98e93880f9b1        4 days ago          458MB
7bash                latest              417531d957ab        8 weeks ago         15.2MB

COPY

  • 容器内端口映射

内部的容器是一个隔离的环境,若需要开启端口供外界访问则需要开始端口映射。

下面以 Nginx 为例。

bash

代码语言:javascript
代码运行次数:0
复制
1# 拉取 nginx
2docker pull nginx
3docker run --name webserver -d -p 8080:80 nginx

COPY

-p开启端口映射,外部端口:内部端口。8080:80表示内部 80 -> 外部 8080。

现在通过外部 IP 访问 8080 端口将会看到:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-07-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 开始前的准备
  • 基本命令
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档