docker的学习与使用

Ubuntu上学习使用Docker的详细入门教程

1.镜像(image)与容器(container)

就我个人的理解,镜像与容器的关系就类似与类与实例的关系。镜像是用来创建容器的,是容器的只读模板。在实际使用中,使用镜像创建容器,容器在linux上本地运行,并与其他容器共享主机的内核。它运行一个独立的进程,占用的内存不超过任何其他可执行文件,体现其轻量级的特点。

2.获取镜像

获取镜像主要有两种方式,一种是使用他人打包好,并通过网络(主要是docker官方的docker hub和一些类似的镜像托管网站)进行分享的镜像,一种则是在本地将镜像保存为本地文件,直接使用生成的文件进行共享。

网络

主要借助两条指令。docker pulldocker run

docker pull

1
docker pull [OPTIONS] NAME[:TAG|@DIGEST]

我们先关注NAME和紧跟的两个互斥的配置项。这里给出三种不同的拉取方式。

  • NAME

    1
    2
    docker pull ubtuntu
    如果不指定标签,Docker Engine会使用:latest作为默认标签拉取镜像。
  • NAME:TAG

    1
    docker pull ubuntu:14.04
  • NAME@DIGEST

    1
    docker pull ubuntu@sha256:45b23dee08af5e43a7fea6c4cf9c25ccf269ee113168c19722f87876677c5cb2
    • 这个为我们提供了一种指定特定版本镜像的方法。
    • 为了保证后期我们仅仅使用这个版本的镜像,我们可以重新通过指定DIGEST(通过查看镜像托管网站里的镜像信息或者是之前的 pull 输出里的DIGEST信息)的方式 pull 该版本镜像。

更多详见:

docker run

该指令可以直接拉取本地不存在的镜像,并且创建一个容器。

1
sudo docker run hello-word

个人

docker load

1
docker load [OPTIONS]

显示镜像

1
sudo docker images

删除镜像

生成镜像

主要包含两种方式,一种是基于构建文件Dockerfile和 docker build 的自动构建,一种是基于 docker commit 提交对于现有容器的修改之后生成镜像。

docker build

1
docker build [OPTIONS] PATH | URL | -

细节参考:https://docs.docker.com/engine/reference/commandline/build/

对于已有的Dockerfile文件,我们可以使用如下指令生成镜像:

1
2
3
4
5
6
$ docker build -t vieux/apache:2.0 .
# 使用'.'目录下的Dockerfile文件。注意结尾的路径`.`,这里给打包的镜像指定了TAG
$ docker build -t whenry/fedora-jboss:latest -t whenry/fedora-jboss:v2.1 .
# 也可以指定多个TAG
$ docker build -f dockerfiles/Dockerfile.debug -t myapp_debug .
# 也可以不使用'.'目录下的Dockerfile文件,而是使用-f指定文件

这样我们就可以在 docker images中看到生成的镜像了。

docker commit

1
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

3.使用镜像(创建容器)

docker run

1
2
3
4
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

例:
docker run -it --name [name] --privileged=true --network host -v [host地址]:[容器地址] [images] /bin/bash
  • -i和-t:为docker创建一个伪终断
  • /bin/bash: 表示载入容器后运行bash,为docker容器创建一个进程的运行,避免kill itself
  • -v 表示将本地的文件夹以只读( :ro ,读写可以写为 :rw ,如果不加,则默认的方式是读写)的方式挂载到容器中的 /tcdata 目录中。
  • 更多的参数可以参考该网址:https://docs.docker.com/engine/reference/run/#detached-vs-foreground

查看容器信息

1
sudo docker ps -a

启动容器

1
2
3
sudo docker start [container]
#重启
sudo docker restart [container]

进入容器

可以用 attachexec进入容器,但是更推荐后者,因为 exec退出后不会把容器关闭

1
sudo docker exec -it [container] bash

停止、退出和删除容器

1
2
3
4
5
6
#停止容器
docker stop [container]
#退出容器
exit
#删除容器 可以移除一个容器或者多个容器
docker rm [OPTIONS] CONTAINER [CONTAINER...]

从本机与容器中互相拷贝数据

1
2
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

docker的学习与使用
https://collapsarva.github.io/2023/10/30/docker的学习与使用/
Author
zzk
Posted on
October 30, 2023
Licensed under