Docker笔记

安装

  1. 卸载旧版本以及相关的依赖项
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
  1. 安装所需的软件包。
    yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2
    sudo yum install -y yum-utils device-mapper-persistent-data lvm2
  2. 安装 Docker Engine-Community
    列出并排序存储库中可用的版本
    yum list docker-ce --showduplicates | sort -r
    sudo yum install docker-ce-<version> docker-ce-cli-<version> containerd.io
  3. 启动docker
    sudo systemctl start docker

用户组

  1. 创建docker组
    sudo groupadd docker
    2.将当前用户加入docker组
    sudo gpasswd -a ${USER} docker
    3.重启服务
    sudo service docker restart
    4.刷新docker成员
    newgrp - docker

仓库

登录docker仓库
docker login -u user-p psw123 abc.com
登出
docker logout

镜像

拉取镜像
默认latest版本,-a拉去所有tagged镜像 默认存在 /var/lib/docker/
docker pull abc
重新定义镜像
docker tag [ImageId] xxx.com/abc:v1
推送镜像
docker push xxx.com/abc:v1
查看
docker images
删除
docker rm -f <imgId>

容器

docker save 将指定镜像保存成 tar 归档文件
docker save -o img.tar imgName
-o:输出到的文件

docker load 导入使用 docker save 命令导出的镜像。
–input , -i : 指定导入的文件,代替 STDIN。
docker load -i abc.tar

执行docker load -i xxx.tar.gz时候报错open /xxx No such file or directory这种情况属于容器快照文件缺乏基础镜像导致的
因为docker使用了联名文件系统,即在基础镜像上覆盖一层可写层来执行其他操作。而容器快照文件只包含了上层操作,没有底层的基础镜像。这也是docker save保存的镜像压缩包和docker export保存的容器快照压缩包的区别。
实际应用的时候因为很多镜像都使用了同一个基础镜像,所以使用容器快照的话更节省资源,不需要每个镜像都加载基础镜像。
解决方案
一般容器快照文件都会包含minifest文件,找到minifest文件。里面会告诉你需要的基础镜像,docker load加载基础镜像之后docker load重新加载即可

docker export将文件系统作为一个tar归档文件导出到STDOUT
docker export > /home/export.tar
docker save基于镜像,export基于容器;expor导出的镜像文件大小,小于 save保存的镜像

docker import从归档文件中创建镜像
docker import xxx.tar xxx:v4

export导出(import导入)是根据容器拿到的镜像,再导入时会丢失镜像所有的历史,所以无法进行回滚操作(docker tag <LAYER ID> <IMAGE NAME>);而save保存(load加载)的镜像,没有丢失镜像的历史,可以回滚到之前的层(layer)。(查看方式:docker images --tree)

导入容器快照:cat docker/myImd.tar | docker import - test/myImg:v1
也可以通过指定url或者某个目录来导入docker import http://example.com/test.tgz example/test

docker start container_name/container_id # 通过容器名字或ID启动容器
docker stop container_name/container_id # 通过容器名字或ID停止容器
docker restart container_name/container_id # 通过容器名字或ID重启容器
docker rm container_name/container_id :删除一个或多个容器
-v :删除与容器关联的卷
-f :强制删除

docker rmi : 删除本地一个或多个镜像
-f :强制删除
–no-prune :不移除该镜像的过程镜像,默认移除;
docker rmi -f imgId/imgName:tag

镜像不被任何容器所使用的前提下,批量删除镜像:docker images | grep abc | awk ‘{print $1":"$2}’ | xargs docker rmi

注:导入加载进来觉得不合适可以使用 docker rm 容器ID 、 docker rmi 镜像ID 来删掉。
移除所有的容器和镜像
docker kill $(docker ps -q)
docker rm $(docker ps -a -q)
docker rmi $(docker images -q -a)
docker logs -f -t --since=“2017-05-31” --tail=100 container_name
docker ps -a | awk ‘{print $1}’ | xargs docker rm -f
使用Docker进行容器的创建:
docker info # 查看docker的信息

docker exec在运行的容器中执行命令
-d :分离模式: 在后台运行
-i :即使没有附加也保持STDIN 打开
-t :分配一个伪终端
docker exec -it container_name/container_id /bin/bash # 通过容器名字或ID进入容器
exit # 退出容器

docker run创建一个新的容器并运行一个命令
docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
OPTIONS说明:
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
-p: 指定端口映射,格式为:hostPort:containerPort 主机(宿主)端口:容器端口
–name= xxx: 为容器指定一个名称;
-h: 指定容器的hostname;
-e username=ritchie: 设置环境变量;
–volume , -v: 绑定一个卷

docker run -itd --name=container_name img_name # 使用img_name以交互模式在后台运行分配了伪终端的名为container_name的镜像

死循环进程,让他不停的循环下去,前台永远有进程执行,那么容器就不会退出了
docker run -d centos /bin/sh -c “while true; do echo hello world; sleep 1000; done”

使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
docker run -it nginx:latest /bin/bash

docker update更新一个或多个容器的配置
更新容器重启策略:docker update --restart=always containerId
更新容器内存:docker update -m 500M f361b7d8465

docker inspect 获取容器/镜像的元数据
docker inspect nacos
docker inspect -f {{.Config.Hostname}} nacos

从容器里面拷文件到宿主机
docker cp apline:/usr/local/abc.sh /docker
从宿主机拷文件到容器里面
docker cp /docker/abc.sh apline:/usr/local/

批量删除docker镜像为none的方法
docker images|grep none|awk ‘{print $3}’|xargs docker rmi
或者
docker rmi $(docker images | grep “^” | awk “{print $3}”)

获取所有容器ID
docker ps -a -q
停止所有容器
docker stop $(docker ps -a -q)
删除所有停止的容器
docker rm $(docker ps -a -q)
删除所有的镜像
docker rmi $(docker images -q)
移除没有标签并且没有被容器引用的镜像,这种镜像称为dangling(摇晃的)镜像
docker image prune -a --filter “until=24h”
移除停止的容器
docker container prune
移除卷
docker volume prune
移除网络
docker network prune
移除所有,包括镜像、容器、网络、卷
docker system prune --volumes

配置阿里云镜像服务

  1. 登录进入阿里云镜像服务中心,获取镜像地址https://****.mirror.aliyuncs.com
  2. 在/etc/docker目录下找到在daemon.json文件(没有就新建),将下面内容写入
{
    "registry-mirrors": ["https://****.mirror.aliyuncs.com"],
	"insecure-registries":["192.168.9.68:80"]
}

“registry-mirrors”: [], #私库加速器
“insecure-registries”: [], #这个私库的服务地址
3. 重启daemon
systemctl daemon-reload
4. 重启docker服务
systemctl restart docker

基本开发流程

  1. 寻找基础镜像
  2. 基于基础镜像编写Dockerfile脚本
  3. 根据Dockerfile脚本创建项目镜像
  4. 将创建的镜像推送到docker仓库 (根据自身需要,可做可不做)
  5. 基于项目镜像创建并运行docker容器 (实现最终部署)

制作镜像

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

docker build [OPTIONS] <PATH | URL | ->
--tag, -t,指定镜像的名字及tag
使用当前目录的Dockerfile构建镜像:docker build -t name:tag .
-f 指定Dockerfile文件位置
docker build -f /path/Dockerfile .

Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。它们简化了从头到尾的流程并极大的简化了部署工作。

// FROM 指定基础镜像
FROM nginx
// RUN执行命令。每一条RUN都会生成一层,一个需求尽量使用&&,减少RUN,即减少了分层
RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
RUN yum update && yum install -y vim \
//COPY 源路径下的package.json复制到新一层的镜像路径/user/src/app
COPY package.json /usr/src/app/
// WORKDIR 指定工作目录。指定下层工作的目录为容器内的/data,尽量使用绝对目录
WORKDIR /data
// ADD添加,ADD能自动解压文件。
ADD hello test/
// CMD 执行命令
CMD ["python", "app.py"]
// ENV 设置环境变量
ENV VERSION=1.0 DEBUG=off \
NAME="Happy Feet"
// VOLUMES 挂载
// EXPOSE 端口暴露
EXPOSE <端口1> [<端口2>...]

FROM构造的新镜像是基于哪个镜像
例如:FROM centos:v1

COPY拷贝文件或者目录到镜像,用法同ADD
例如:COPY ./startup.sh /startup.sh

MAINTAINER维护者信息
例如:MAINTAINER yanglin

ENTRYPOINT运行容器时执行的shell命令
例如:ENTRYPOINT [“/bin/bash”,“-c”,“/startup.sh”]
ENTRYPOINT /bin/bash -c ‘/startup.sh’

RUN构建镜像时运行的shell命令
例如:RUN [“yum”, “install”, “http”]
RUN yum install httpd

VOLUME指定容器挂载点到宿主机自动生成的目录或者其他容器
例如:VOLUME [“/path/to/dir”]

CMD运行容器时执行的shell命令
例如:CMD [“-c”,“/startup.sh”]
CMD [“/usr/sbin/sshd”,“-D”]

USER为RUN,CMD,ENTRYPOINT执行命令指定运行用户
例如:USER www
镜像构建完成后,通过docker run运行容器时,可以通过-u参数来覆盖所指定的用户。

EXPOSE指定于外界交互的端口,即容器在运行时监听的端口
EXPOSE 8081 8082

WORKDIR为RUN,CMD,ENTRYPOINT,COPY和ADD设置工作目录
例如:WORKDIR /data

ENV设置容器内环境变量
例如:ENV MYSQL_ROOT_PASSWORD 123456

HEALTHCHECK健康检查
HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost/ ||exit 1

ADD拷贝文件或者目录到镜像,如果是URL或者压缩包会自动下载或者自动解压
例如:ADD hom* /mydir/

ARG在构建镜像时指定一些参数
例如:FROM centos:6
ARG age=100

Dockerfile中设置环境变量要用 ENV
ENV JAVA_HOME /usr/local/jdk1.8.0_171
ENV PATH J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:PATH

Docker Compose

Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器。
// 一般使用步骤:

1、创建一个空目录。
2、定义 Dockerfile,方便迁移到任何地方
3、编写 docker-compose.yml 文件
4、运行 docker-compose up 启动服务

安装docker-compose
curl -L https://github.com/docker/compose/releases/download/1.29.0/docker-compose-Linux-x86_64 -o /usr/local/bin/docker-compose
chmod +x docker-compose

// docker-compose 常用命令:

// up 该命令十分强大,它将尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作
docker-compose up [options] [SERVICE...]   // -d 比较常用,不会打印过程。
//down 停止 up 命令所启动的容器,并移除网络。——这里需要特别注意,up 启动的,不应该使用rm 去删除,因为这样无法删除网络
docker-compose down
// run 命令
docker-compose run [options] [-p PORT...] [-e KEY=VAL...] SERVICE [COMMAND] [ARGS...]
// ps 查看项目中的所有容器
docker-compose ps
// restart 重启服务
docker-compose restart [options] [SERVICE...]。
// stop start 停止和开启容器
docker-compose stop xxx
docker-compose start xxx
// kill 强制停止某容器
docker-compose kill -s SIGINT
// rm 删除指定或所有的服务容器
docker-compose rm -f [service]
// build 重建某个容器,在 Dockerfile 发生了改变的时候,可以重建image。然后再 up 运行起来所有的容器
docker-composer build    //重建所有容器
docker-compose build xxx   //重建指定容器
//exec 进入某个容器
docker-compose exec -it ct-phpfpm /bin/bash
// images 查看compose文件中包含的镜像
docker-compose images
// pull 拉取依赖
docker-compose pull [options] [SERVICE...]
// push 推送服务依赖的镜像到 Docker 镜像仓库。
docker-compose push
// port 打印某容器的映射端口
docker-compose port xxx
// config 验证 docker-compose 文件格式是否正确
docker-compose config// top 查看所有容器的进程
docker-compose top

docker-compose -f abc.yaml up -d blkboard
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 要下载Docker笔记,首先需要了解Docker是什么以及其使用场景。 Docker是一种开源的容器化平台,可以帮助用户打包、部署和运行应用程序。通过使用容器化技术,用户无需担心运行环境的差异,可以将应用程序和其依赖项打包到一个可移植的容器中,随时在不同的环境中运行。 要下载Docker笔记,可以按照以下几个步骤进行操作: 1. 首先,需要在计算机上安装Docker。可以从Docker官方网站(https://www.docker.com/)上下载适合自己操作系统的Docker安装包,并按照安装指南进行安装。 2. 安装完成后,需要启动Docker服务。根据操作系统的不同,可以在启动菜单或终端中找到Docker应用程序,并点击打开。在Docker控制台中,可以查看、管理容器以及进行其他操作。 3. 接下来,需要搜索并下载Docker笔记的镜像。可以使用Docker Hub(https://hub.docker.com/)这个官方的镜像仓库,搜索关键词以找到合适的笔记镜像。在搜索结果中,会显示镜像的名称、描述、标签等信息,选择一个合适的镜像。 4. 找到想要下载的笔记镜像后,可以使用Docker命令行工具或Docker控制台中的图形界面来下载镜像。通过输入命令`docker pull 镜像名称:标签`,即可下载对应的笔记镜像到本地。 5. 下载完成后,可以使用`docker images`命令在本地查看已下载的镜像列表。根据下载的笔记镜像的名称和标签,可以使用`docker run`命令来创建并启动一个容器,从而运行笔记。 通过以上步骤,就可以成功下载Docker笔记并在本地运行。希望这些信息对您有帮助! ### 回答2: 要下载Docker笔记,首先需要知道从哪里获取这些笔记Docker有一个官方文档网站,其中包含了大量关于Docker的技术文档、教程和示例以及各种使用场景的说明。用户可以访问Docker官方网站,在文档部分进行浏览和搜索,找到所需的笔记。 在Docker官方文档网站上,用户可以按照主题、标签或关键字进行检索,以找到相关的笔记。网站还提供了各种文件格式的下载选项,包括PDF、EPUB和HTML版本,用户可以根据自己的使用习惯选择适合的格式进行下载。 此外,还有一些第三方资源库和网站提供了Docker相关的笔记下载。例如GitHub上有很多开源项目,其中包含了Docker的使用笔记和示例代码。用户可以通过在GitHub上搜索关键字"Docker笔记"或"Docker notes"来找到相关的项目,然后根据项目的说明进行下载。 总之,下载Docker笔记可以通过Docker官方文档网站或第三方资源库进行。用户可以根据自己的需求和偏好选择下载适合自己的格式和来源。 ### 回答3: 要下载 Docker 笔记,首先需要确保已经安装了 Docker 客户端工具。然后按照以下步骤进行下载: 1. 打开终端或命令提示符,输入以下命令来下载 Docker 笔记Docker 镜像: ``` docker pull [镜像名称] ``` 这里的 `[镜像名称]` 是 Docker Hub 上提供的 Docker 镜像名称,可以根据需要搜索并选择合适的镜像。 2. 等待镜像下载完成后,使用以下命令来创建和运行一个 Docker 容器,并将笔记下载到本地: ``` docker run -it --name [容器名称] [镜像名称] [下载命令] ``` 这里的 `[容器名称]` 是用于标识容器的名称,`[下载命令]` 是具体的下载命令,可以根据下载方式的不同进行相应的设置。 3. 等待下载完成后,可以使用以下命令来停止并删除容器: ``` docker stop [容器名称] docker rm [容器名称] ``` 这里的 `[容器名称]` 是之前创建容器时指定的名称。 通过以上步骤,你就可以成功下载 Docker 笔记到本地了。记得根据实际需求选择适合的 Docker 镜像和下载命令,同时也可以通过 Docker Hub 上的文档和社区提供的资源,了解更多有关 Docker 的使用方法和技巧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiha_zhu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值