【随时更新】笔记—Docker和容器【个人使用】
集装箱是什么。
在操作系统中创建另一个操作系统的一种技术。
可以将虚拟化视为类似的概念。
虚拟化和容器之间的区别。
在虚拟化中,可以通过在主机操作系统上启动虚拟化软件,并在其之上运行的客户操作系统中启动进程。
这种情况下,所有的库、命令和内核将在客户操作系统上创建一个专用的版本,并且进程将引用这些版本。
在一个容器中,虽然库和命令会每次都被创建,但内核是参考宿主操作系统的。
比较虚拟化和容器技术,前者分为主机操作系统、虚拟机、客户机操作系统和进程四个阶段,而后者只有主机操作系统、库和命令以及进程三个阶段。
即,在不使用虚拟机的情况下,处理速度更快是其特点。
图书馆,命令和内核是什么?
命令(Command)是指终端命令,如ls或cd。
图书馆是一组用于启动进程的库,在Mac上,它们存储在Library目录中。
内核是存储了用于执行计算机基本操作的功能的库集合(称为系统调用),它会根据命令被调用并进行处理。
换句话说,当进程启动时,首先会调用命令和库,最终会执行系统调用。
Docker是什么?
一个用于轻松创建容器的功能。
通常情况下,为了创建容器,需要定义和创建用于该容器的命令和库。
通过安装名为Docker的工具并使用Docker命令,可以轻松导入创建容器所需的命令和库。
DockerHub是什么?
存储着创建容器所需的命令和库集合(操作系统映像)的仓库。
比如说,在Linux操作系统中,针对不同的发行版本(如CentOS和Debian),都会准备相应的操作系统镜像。
Dockerfile是什么?
用于给从DockerHub下载的Docker镜像添加附加信息的文件。
如果考虑在Docker上创建一个CentOS容器,并在其中运行php应用程序,本来需要进行以下操作。
-
- CentOSのDockerイメージをもとにコンテナを作成する
-
- コンテナの中に入る
-
- サーバー(apacheなど)をインストールする
-
- phpをインストールする
-
- サーバーを起動する
-
- 適当なphpファイルを作ってコンテナ上にコピーする
- 8080番ポートにアクセスして動作確認をする
总结起来,Docker镜像只包含容器的信息,因此在实际开发中需要额外的各种程序,并且需要每次运行终端来添加。
Docker文件是将这些一系列命令记录在文件中,通过将其转化为镜像并基于此创建容器,从而实现所有必要步骤的自动执行。
详细内容如下。
Docker指令集合
% docker pull centos7:centos7
% docker run -it --name centos7 centos:centos7
# M1Macで実行するときには以下のようにプラットフォームの指定が必要
% docker run -it -d --platform=linux/amd64 --name centos7 centos:centos7
# 必要なdockerイメージがpullされていなければ自動ダウンロードが入る
# --name centosは省略可能(コンテナ名をつけているだけ)
# -dはコンテナをデーモン(バックグラウンド)で起動するためのオプション(省略可能)
# 公式は docker run [オプション] --name コンテナ名 [イメージ名][タグ名] [コンテナ起動後に実行するコマンド]
% docker exec -it centos7 /bin/bash
# 成功するとプロンプトが以下のように変化する
[root@8d8ca2646e59 /]#
# @以下はコンテナID "/"はディレクトリ、"#"がプロンプト
% docker ps
# 結果
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8d8ca2646e59 centos:centos7 "/bin/bash" 50 minutes ago Up 50 minutes centos7
# -aオプションをつけることで停止中のコンテナも確認できるようになる
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8d8ca2646e59 centos:centos7 "/bin/bash" 54 minutes ago Exited (137) 19 seconds ago centos7
% docker stop コンテナ名またはID
% docker start コンテナ名またはID
% docker commit コンテナ名 イメージ名
>> sha256:33fd144ef6171206b545f23cafe6bb7c877df2386618c53e2e6011e0214b6284
% docker images
>>
REPOSITORY TAG IMAGE ID CREATED SIZE
test1 latest 33fd144ef617 11 seconds ago 204MB
% docker rm コンテナ名もしくはID
# DockerfileというファイルからDockerファイルが作られる
% docker build -t dockerイメージ名 dockerイメージのパス
# イメージの削除
% docker rmi イメージ名