laclys / Front-End_practice

Daily practice
5 stars 0 forks source link

Docker Note #153

Open laclys opened 3 years ago

laclys commented 3 years ago

Docker Note

容器技术的一个实现

container

快速打包技术

  • 标准化
  • 轻量化
  • 易移植

Linux Container(2008)

Namespace和Cgroup(负责资源管理控制)两大机制保障

标准化

docker != container

Image VS Container

Image

Container

”运行中的Docker Image“

  • 实质是复制image并在image最上层加上一层read-write的层 (称之为container layer,容器层)
  • 一个Image可以创建多个Container

获取

basic

docker container run nginx 可以去创建一个容器,如果没有nginx会去下载

docker container ls 容器的列出(up)

docker container stop (ID可以只写前面) 容器的停止

docker container ps -a or docker container ls -a 容器的列出(up和exit)(停止的也会展示)

docker container rm 容器的删除

tips

docker container stop $(docker container ps -qa) 批量停止 docker container ps -qa打印出所有container ID传入$

docker container rm $(docker container ps -qa) 同理批量删除 docker container ps -qa打印出所有container ID传入$、

容器两种模式attached和detached模式

(win不是完整的attached模式,ctrl+c不能把容器停掉)

detached模式 > docker container run -d -p 80:80 nginx (后台运行)

docker attach detached -> attached

(* 创建容器尽量使用detached模式)

容器交互

docker container logs 查看log

docker container logs -f 实时查看log

docker container run -it ubuntu sh 创建一个容器并进入交互式模式 (这里创建了ubuntu sh)

docker container exec -it 在一个已经运行的容器里执行一个额外的command

eg:

docker container run -d -p 80:80 nginx

docker exec -it <ID> sh

*exit退出

Container vs VM

截屏2021-06-29 下午11 04 59

容器并不是mini的虚拟机:container其实就是进程。容器中的进程被限制了对CPU内存等资源的访问。当进程停止后,容器就退出

docker container top 显示container运行了那些进程

docker container run

laclys commented 3 years ago

镜像获取

docker-stages

Image操作

docker image pull xxx 拉取镜像xxx

docker image pull nginx:1.20.0 指定版本 拉取nginx:1.20.0

docker image pull quay.io/bitnami/nginx Quay上拉取镜像

docker image ls 查看镜像

docker image inspect 显示镜像更多信息

docker image rm 删除镜像 (如果有正在使用的容器是无法删除的 必须docker container rm 删除了容器才可以)

Image导出、导入

docker image save nginx<: version> -o nginx.image 导出

docker image load -i ./nginx.image 导入

Dockerfile

Docker can build images automatically by reading the instructions from a Dockerfile. A Dockerfile is a text document that contains all the commands a user could call on the command line to assemble an image. Using docker build users can create an automated build that executes several command-line instructions in succession.

laclys commented 3 years ago

example

hello.py

print('hello docker!')

Dockerfile

FROM ubuntu:21.04
RUN apt-get update && \
    DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y python3.9 python3-pip python3.9-dev
ADD hello.py /
CMD ["python3", "/hello.py"]

docker image build -t hello . 构建名为hello的构建(-t是tag的意思)

➜  docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
hello        latest    1a963417de9a   43 seconds ago   206MB

构建成功

➜  docker run -it hello
hello docker!

执行成功!

commit

docker提供了一个方法直接 通过一个container创建一个新的image

docker container commit <REPOSITORY:[:tag]>

laclys commented 3 years ago

前端example

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Hello Docker</title>
</head>
<body>
  Test
</body>
</html>

这里随便写了一个(用来替换默认的nginx欢迎页)

➜  docker image ls
REPOSITORY    TAG       IMAGE ID       CREATED          SIZE
docker-test   latest    65a48f14f1c1   20 seconds ago   133MB

docker-test已经生成

成功!

laclys commented 3 years ago

前端Example2- 部署一个项目

我这边自己在开发的这个项目wukong尝试简单部署一下

git clone git@github.com:laclys/wukong.git 克隆这个项目

npm run build or yarn run build 构建项目,构建成功生成docs文件夹

截屏2021-07-04 上午1 19 48

打包完成后进入根目录新建成一个Dockerfile文件在里面写入

FROM nginx
MAINTAINER Lac
COPY default.conf /etc/nginx/conf.d/default.conf
COPY docs/ /usr/share/nginx/html/

简单说明一下 基于nginx ,署名:自己的名字 。拷贝nginx配置文件以及docs下的内容到nignx镜像

docker image build -t wukong-docker . docker container run -d -p 80:80 wukong-docker

~ docker container ps -a
CONTAINER ID   IMAGE           COMMAND                  CREATED          STATUS          PORTS                               NAMES
48ad12f88951   wukong-docker   "/docker-entrypoint.…"   12 minutes ago   Up 12 minutes   0.0.0.0:80->80/tcp, :::80->80/tcp   nervous_aryabhata
截屏2021-07-04 上午1 21 10

可以看到容器在80端口成功运行了