Docker笔记

本文详细列举了Docker的常用命令,包括启动、停止Docker服务,管理镜像(列出、搜索、拉取、删除)以及容器(新建、启动、停止、重启、删除)。还介绍了Dockerfile的使用,以及如何构建和管理自定义镜像。此外,文章还涉及了镜像的推送至阿里云仓库和私有仓库的操作流程。
摘要由CSDN通过智能技术生成

一.docker常用命令

1.帮助启动类命令

启动docker:systemctl start docker

停止docker:systemctl stop docker

重启docker:systemctl restart docker

查看docker状态:systemctl status docker

开机启动:systemctl enable docker

查看docker概要信息:docker info

查看docker总体帮助文档:docker --help

查看docker命令帮助文档:docker 具体命令 --help

2.镜像命令

列出本地主机上的镜像:docker images

列出本地所有的镜像(含历史映像层):docker images -a

只显示镜像id:docker images -q

查询某个镜像:docker search 镜像名称

只列出N个镜像,默认25个:docker search --limit 5 redis

拉取某个镜像:docker pull mysql:5.6

查看镜像/容器/数据卷所占的空间:docker system df

删除镜像:docker rmi 镜像id

强制删除:docker rmi -f 镜像id

删除多个:docker rmi -f 镜像id 镜像id 镜像id

删除全部:docker rmi -f $(docker images -qa)

3.容器命令

1.新建+启动容器

//新建+启动容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS说明(常用):有些是一个减号,有些是两个减号
--name="容器新名称"  为容器指定一个名称;
-d:后台运行容器并返回容器ID,也即启动守护式容器(后台运行);
-i:以交互模式运行容器,通常与-t同时使用;
-t:为容器重新分配一个伪输入终端,通常与-i同时使用
也即启动交互式容器(前台有伪终端,等待交互);

-P:随机端口映射,大写P
-p:指定端口映射,小写p

 启动交互式容器(前台命令行)

使用镜像ubuntu:latest以交互模式启动一个容器,在容器内执行/bin/bash命令.

docker run -it ubuntu /bin/bash
参数说明:
-i:交互式操作.
-t:终端.
ubuntu:ubuntu 镜像.
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式Shell,因此用的是/bin/bash.
要退出终端,直接输入exit

2. 列出当前所有正在运行的容器

列出正在运行的容器
docker ps

列出当前所有正在运行的容器+历史上运行过的
docker ps -a

显示最近创建的容器
docker ps -l

显示最近n个创建的容器
docker ps -n

静默模式,只显示容器编号
docker ps -q

 3.退出容器

run进去容器,exit退出,容器停止
exit

run进去容器,ctrl+p+q退出,容器不停止
ctrl+p+q

4.启动已停止运行的容器

docker start 容器id或者容器名称

5.重启容器

docker restart 容器id或容器名

6.停止容器

docker stop 容器id或容器名

7.强制停止容器

docker kill 容器id或容器名

8.删除已停止的容器

删除已停止的容器
docker rm 容器id

强制删除
docker rm -f 容器id

一次性删除多个容器实例
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm

9. 启动守护式容器(后台服务器)

redis为例
前台模式:
docker run -it 容器名或容器id

后台模式:
docker run -d 容器名或容器id

10.查看容器日志

docker logs 容器id

11.查看容器内运行的进程

docker top 容器id

12.查看容器内部细节

docker inspect 容器id

13.进入正在运行的容器并以命令行交互

重新进入
docker exec -it 容器id /bin/bash

重新进入
docker attach 容器id

14.从容器内拷贝文件到主机上

docker cp 容器id:容器内路劲 目的主机路径
例如:
docker cp 容器id:/usr/local/mycptest/container.txt(容器内路径) /tmp/c.text(主机路径)

15.导入和导出容器

export导出容器的内容流作为以个tar归档文件[对应import命令]
例如:docker export 容器id>文件名.tar

import从tar包中的内容创建一个新的文件系统在导入为镜像[对应export]
例如:cat 文件名.rar | docker import - 镜像用户/镜像名:镜像版本号

16.docker镜像commit操作案例

docker commit提交容器副本使之成为一个新的镜像

docker commit -m=提交的描述信息"" -a="作者" 容器id要创建的目标镜像名:[标签名]

案例演示:安装vim
1.更新包管理工具
apt-get update
2.安装vim
apt-get -y install vim

17.本地镜像发布阿里云流程

1.镜像的生成方法参考16,另一种方式为dockerfile

进入阿里云开发者平台 :

https://promotion.aliyun.com/ntms/act/kubernetes.html

创建仓库镜像

选择控制台,进入容器镜像服务

 选择个人实例

命名空间

继续

仓库名称 

继续

进入管理界面获得脚本

  • 将镜像推送到阿里云
    • 将镜像推送到阿里云registry
      • 管理界面脚本

脚本实例 

官网会生成,黏贴阿里云官网的

阿里云镜像下载至本地

docker pull registry.cn-hangzhou.aliyuncs.com/atguiguwh/myubuntu:1.1

18.本地镜像推送至私有仓库

1.下载docker registry

docker pull registry

 

 

 2.运行私有库registry,相当于本地有个私有docker hub

docker run -d -p 5000:5000  -v /zzyyuse/myregistry/:/tmp/registry --privileged=true registry

 默认情况,仓库被创建在容器的/var/lib/registry目录下,建议自行用容器卷映射,方便与宿主机联调

  • 案例演示创建一个新镜像,ubuntu安装ifconfig命令
    • 原始的Ubuntu镜像是不带着ifconfig命令的
    • Hub上下载ubuntu镜像到本地并成功运行

  • 外网连通的情况下,安装ifconfig命令并测试通过

  docker 容器内执行命令

apt-get update
apt-get install net-tools

  • 安装完成后,commit我们自己的新镜像
公式:
docker commit -m="提交的描述信息" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
命令:在容器外执行,记得
docker commit -m="ifconfig cmd add" -a="zzyy" a69d7c825c4f zzyyubuntu:1.2

  • 启动我们的新镜像并和原来的对比
  • 官网是默认下载的Ubuntu没有ifconfig命令
  • 我们自己commit构建的新镜像,新增加了ifconfig功能,可以成功使用。

 

curl验证私服库上有什么镜像

 curl -XGET http://192.168.111.162:5000/v2/_catalog

 可以看到,目前私服库没有任何镜像上传过。。。。。。

将新镜像myubuntu:1.3修改符合私服规范的tag

按照公式: docker   tag   镜像:Tag   Host:Port/Repository:Tag
自己host主机IP地址,填写同学你们自己的,不要粘贴错误,O(∩_∩)O
使用命令 docker tag 将zzyyubuntu:1.2 这个镜像修改为192.168.111.162:5000/zzyyubuntu:1.2
 
docker tag  zzyyubuntu:1.2  192.168.111.162:5000/zzyyubuntu:1.2

 

修改配置文件使之支持http

vim命令新增如下红色内容:vim /etc/docker/daemon.json

上述理由:docker默认不允许http方式推送镜像,通过配置选项来取消这个限制。====> 修改完后如果不生效,建议重启docker

push推送到私服库

docker push 192.168.111.162:5000/zzyyubuntu:1.2

 

 curl验证私服库上有什么镜像

curl -XGET http://192.168.111.162:5000/v2/_catalog

pull到本地运行

docker pull 192.168.111.162:5000/zzyyubuntu:1.2

 

docker run -it 镜像ID /bin/bash

 

4.docker容器数据卷

1.容器卷记得加入

如果docker挂载主机目录访问出现cannot open directory .:Permission denied
解决办法:在挂载目录后多加一个--privileged=true参数即可
开启后容器内的root拥有真正的root权限

2.运行一个带有容器卷存储功能的容器实例

docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名

docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:rw 镜像名

默认:rw可读可写

docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro 镜像名

ro:只读

2.卷的继承和共享

docker run -it --privileged=true --volumes-from 父类 --name=u2 容器名,容器id

5.docker常规安装简介

1.总体步骤

2.tomcat安装

docker run -d -p 8080:8080 --name mytom 镜像id或镜像名
//运行成功后无法通过端口访问,需要将webapps.dist用mv webapps.dist webapps

//免修改版
docker pull billygoo/tomcat8-jdk8

docker run -d -p 8080:8080 --name mytom 镜像名或镜像id

3.mysql安装

//简单版安装
docker pull mysql:5.7

//启动mysql实例
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d 镜像名或镜像id

//docker安装mysql可能会出现插入中文数据报错
因为docker上默认字符集编码隐患



//实战版安装
docker run 
-d 
-p 3306:3306 --privileged=true 
-v /develop/mysql/log:/var/log/mysql
-v /develop/mysql/data:/var/lib/mysql
-v /develop/mysql/conf:/etc/mysql/conf.d
-e MYSQL_ROOT_PASSWORD=root
--name mysql 镜像id或镜像名:版本

解决中文乱码问题

//新建my.cnf文件
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8

//重启mysql
docker restart 容器id或容器名

4.redis安装

docker pull redis:6.0.8

 修改redis.conf文件

 

使用使用挂载安装redis

docker run 
-p 6379:6379 
--name myr3 
--privileged=true 
-v /develop/redis/redis.conf:/etc/redis/redis.conf 
-v /develop/redis/data:/data 
-d 
redis:6.0.8 
//这里是告诉服务端应该去读取容器内那个目录下得配置文件
redis-server /etc/redis/redis.conf


docker run -p 6379:6379 --name redis --privileged=true -v /develop/redis/conf/redis.conf:/etc/redis/redis.conf -v /develop/redis/data:/data -d redis:6.0.8 redis-server /etc/redis/redis.conf

 5.nginx安装

# 生成容器
docker run --name nginx -p 9001:80 -d nginx
# 将容器nginx.conf文件复制到宿主机
docker cp nginx:/etc/nginx/nginx.conf /develop/nginx/conf/nginx.conf
# 将容器conf.d文件夹下内容复制到宿主机
docker cp nginx:/etc/nginx/conf.d /develop/nginx/conf/conf.d
# 将容器中的html文件夹复制到宿主机
docker cp nginx:/usr/share/nginx/html /develop/nginx/


docker run \
-p 9002:80 \
--name nginx \
-v /develop/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /develop/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /develop/nginx/log:/var/log/nginx \
-v /develop/nginx/html:/usr/share/nginx/html \
-d 605c77e624dd

5.dockerfile

1.构建三步骤

  • 编写dockerfile
    • docker build命令构建镜像
      • docker run依镜像运行容器实例

2.dockerfile内容基础知识

  • 每条保留字指令都必须为大写字母且后面要跟随至少一个参数
  • 指令按照从上到下,顺序执行
  • #表示注释
  • 每条指令都会创建一个新的镜像层并对镜像进行提交

3.docker执行dockerfile的大致流程

  • docker从基础镜像运行一个容器
  • 执行一条指令并对容器作出修改
  • 执行类似docker commit的操作提交一个新的镜像层
  • docker在基于刚提交的镜像运行一个新的容器
  • 执行dockerfile中的下一条指令直到所有指令都执行完成

4.dockerfile常用保留字

  • FROM 
    • 基础镜像,当前新镜像是基于那个镜像的,指定一个已经存在的镜像作为模板,第一条必须是from
  • MAINTAINER
    • 镜像维护者的姓名和邮箱地址
  • RUN
    • 容器构建时需要运行的命令
    • 两种格式
      • shell格式
      • exec格式
    • RUN是在docker build时运行
  • EXPOSE
    • 当前容器对外暴露出的端口
  • WORKDIR
    • 指定在创建容器后,终端默认登录的进来工作目录,一个落脚点
  • USER
    • 指定该镜像以什么样的用户去执行,如果都不指定,默认是root
  • ENV
    • 用来在构建镜像过程中设置环境变量
  • ADD
    • 将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包
  • COPY
    • 类似ADD,拷贝文件和目录到镜像中
    • 将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置
      • COPY src dest
      • COPY ["src","dest"]
      • <src源路径>:源文件或源目录
      • <dest目标路径>:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建
  • VOLUME
    • 容器数据卷,用于数据保存和持久化工作
  • CMD
    • 指定容器启动后的要干的事情
    • 注意
      • dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run 之后的参数替换
      • 参考官网tomcat的dockerfile演示讲解
        • 官网最后一行命令
        • 我们演示自己的覆盖操作
      • 它和前面RUN命令的区别
        • CMD是在docker run时运行
        • RUN是在docker build时运行
  • ENTRYPOINT
    • 也是用来指定一个容器启动时要运行的命令
    • 类似于CMD指令,但是ENTRYPOINT不会被docker run后面的命令覆盖,而且这些命令行参数会被当做参数送给ENTRYPOINT指令指定的程序
    • 命令格式和案例说明
    • 优点
      • 在执行docker run的时候可以指定ENTRYPOINT运行所需的参数
    • 注意
      • 如果dockerfile中如果存在多个ENTRYPOINT指令,仅最后一个生效

5.自定义mysentos7+jdk8镜像+vim+ifconfig

FROM centos
MAINTAINER zzyy<zzyybs@126.com>
 
ENV MYPATH /usr/local
WORKDIR $MYPATH
 
#安装vim编辑器
RUN yum -y install vim
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把jdk-8u171-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171

ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
 
EXPOSE 80
 
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash

 构建

docker build -t 新镜像名字:TAG .
注意,上面TAG后面有个空格,有个点
#自编dockerfile
FROM centos:7

MAINTAINER zp<zp@1630com>

ENV MYPATH /usr/local
WORKDIR $MYPATH



#安装wget
RUN mkdir -p /usr/local/wget
ADD wget-1.14-18.el7_6.1.x86_64.rpm /usr/local/wget/
RUN rpm -ivh /usr/local/wget/wget-1.14-18.el7_6.1.x86_64.rpm
#安装yum,这里可以使用wget安装
RUN mkdir -p /usr/local/yum-install
RUN rpm -aq|grep yum|xargs rpm -e --nodeps
ADD yum-3.4.3-168.el7.centos.noarch.rpm /usr/local/yum-install/
ADD yum-metadata-parser-1.1.4-10.el7.x86_64.rpm /usr/local/yum-install/
ADD yum-plugin-fastestmirror-1.1.31-54.el7_8.noarch.rpm /usr/local/yum-install/
ADD python-iniparse-0.4-9.el7.noarch.rpm /usr/local/yum-install/
RUN rpm -ivh --force --nodeps /usr/local/yum-install/yum-3.4.3-168.el7.centos.noarch.rpm
RUN rpm -ivh --force --nodeps /usr/local/yum-install/yum-metadata-parser-1.1.4-10.el7.x86_64.rpm
RUN rpm -ivh --force --nodeps /usr/local/yum-install/yum-plugin-fastestmirror-1.1.31-54.el7_8.noarch.rpm
RUN rpm -ivh --force --nodeps /usr/local/yum-install/python-iniparse-0.4-9.el7.noarch.rpm
#安装vim编辑器
RUN rpm --rebuilddb && yum install -y vim
#安装ifconfig命令查看网络IP 如果有多条run yum install 需要在每条前加rpm --rebuilddb &&
RUN rpm --rebuilddb && yum install net-tools.x86_64 -y
#安装java8及lib库
RUN rpm --rebuilddb && yum install -y glibc.i686
RUN mkdir -p /usr/local/java
#ADD是相对路径jar,把jdk-8u171-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一文职
ADD jdk-8u202-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_202
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
 
EXPOSE 80
 
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash
#自编dockerfile
FROM ubuntu
 
MAINTAINER zp<zp@1630com>
 
ENV MYPATH /usr/local
WORKDIR $MYPATH
 
 
ENV DEBIAN_FRONTEND=noninteractive
#安装yum
RUN apt update
RUN apt-get install -y vim-gtk
RUN apt install -y build-essential
RUN apt install -y net-tools
#安装jdk8
RUN mkdir -p /usr/local/java
ADD jdk-8u202-linux-x64.tar.gz /usr/local/java/

#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_202
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
 
EXPOSE 99
 
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash

6.dockerfile部署SpringBoot项目

# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER ZP<441764254@QQ.COM>
# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
#将jar包添加到容器中并更名为app
ADD demo-0.0.1-SNAPSHOT.jar app.jar
#运行jar包
RUN bash -c 'touch /app.jar'
ENTRYPOINT ["java","-jar","/app.jar"]
# 暴露8089端口作为微服务
EXPOSE 8089

### 回答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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值