如果您对Docker基础命令和docker基础命令感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解Docker基础命令的各种细节,并对docker基础命令进行深入的分析,此外还有关于1.dock
如果您对Docker 基础命令和docker基础命令感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解Docker 基础命令的各种细节,并对docker基础命令进行深入的分析,此外还有关于1.docker 学习笔记之入门,docker 在 centos7 下的安装以及基础命令的使用、docker - 基础命令、Docker CLI 实战指南:从基础命令到 Dockerfile 构建和 Docker Compose、Docker 介绍及基础命令的实用技巧。
本文目录一览:- Docker 基础命令(docker基础命令)
- 1.docker 学习笔记之入门,docker 在 centos7 下的安装以及基础命令的使用
- docker - 基础命令
- Docker CLI 实战指南:从基础命令到 Dockerfile 构建和 Docker Compose
- Docker 介绍及基础命令
Docker 基础命令(docker基础命令)
##docker
新建并启动容器
docker run [options] IMAGE [command]
1.option
-d: 后台运行容器,并返回容器ID,也即启动守护式容器;
-i:以交互模式运行容器,通常与 -t 同时使用;
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
2.command
docker run -it centos /bin/bash
列出容器
docker ps [options]
1.option
-a :列出当前所有正在运行的容器+历史上运行过的
-q :静默模式,只显示容器编号
退出容器
docker ps [options]
1.exit 容器停止退出
2. ctrl+p+q 容器不停止退出
启动容器
docker start 容器ID或容器名
重启容器
docker restart 容器ID或容器名
强制停止容器
docker kill 容器ID或容器名
删除容器
1.删除单个 docker rm 容器ID
2.一次性删除多个 docker rm -f $(docker ps -aq)
守护式容器
docker run -d 容器名称 /bin/sh
Docker容器后台运行,就必须有一个前台进程
查看容器日志
docker logs [options] 容器ID
-t 加入时间戳
-f 跟随最新的日志打印
-tail 显示最后多少条
查看容器内运行的进程
docker top 容器ID
查看容器内部细节
docker inspect 容器ID
#### 进入正在运行的容器
新开控制台 启动新的进程 docker exec -it 容器ID /bin/sh
重写进入不会启动新的进程 docker attach 容器ID
拷贝文件
docker cp 容器ID:容器内路径 目的主机路径
#### 容器数据卷
挂载 docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
是否挂载成功 docker inspect 容器ID
####DockerFile 添加容器数据卷
命令 VOLUME["/dataVolumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"]
挂载目录 docker inspect 容器ID
1.docker 学习笔记之入门,docker 在 centos7 下的安装以及基础命令的使用
1、更新update到最新的版本
yum update
2、卸载老版本docker
yum remove docker docker-common docker-selinux docker-engine
3、安装需要的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
4、设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
5、查看docker版本
yum list docker-ce --showduplicates|sort -r
6、安装docker
yum install docker-ce-18.03.1.ce -y #yum install docker-ce-3:20.10.9-3.el8
7、启动docker
systemctl start docker
8、加入开机自启
systemctl enable docker
9、配置国内镜像
vi /etc/docker/daemon.json
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
Docker 包括三个基本概念:
镜像(Image)
容器(Container)
仓库(Repository)
如若以上操作 中出现错误
则强制安装此版本
yum install https://download.docker.com/linux/centos/8/x86_64/stable/Packages/containerd.io-1.4.3-3.1.el8.x86_64.rpm
1.启动
docker start 容器名
2.删除
docker rm 容器名
3.停止所容器
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
4.docker build -t 名称 .
Usage:docker build [OPTIONS] PATH | URL | -
OPTIONS:
-t ,--tag list #构建后的镜像名称
-f, --file string #指定Dockerfiile文件位置
示例:
1,docker build .
2,docker build -t redis:v1 .
3,docker build -t redis:v2 -f /path/Dockerfile /path
Dockerfile 快速入门指令
1.FROM 指定基础镜像
所谓定制镜像,那一定是以一个镜像为基础,在其上进行定制。就像我们之前运行了一个redis镜像的容器,再进行修改一样,基础镜像是必须指定的。而 FROM 就是指定基础镜像,因此一个 Dockerfile 中 FROM 是必备的指令,并且必须是第一条指令。
在 Docker Store 上有非常多的高质量的官方镜像,有可以直接拿来使用的服务类的镜像,如nginx 、 redis 、 mongo 、 mysql 、 httpd 、 php 、 tomcat 等;如果没有找到对应服务的镜像,官方镜像中还提供了一些更为基础的操作系统镜像,
如ubuntu 、 debian 、 centos、 alpine 等这些操作系统的软件库
2、RUN 执行命令
RUN 指令是用来执行命令行命令的。
格式:
RUN \<command\> (类似/bin/sh -cshell格式)
RUN ["executable", "param1", "param2"] (exec格式)
类似shell脚本风格的:
FROM alpine
RUN sed -i ''s/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g'' /etc/apk/repositories
RUN apk add gcc g++ libc-dev wget vim openssl-dev make linux-headers
RUN mkdir -p /usr/src/redis
RUN cd /usr/src/redis
RUN wget -O redis-4.0.11.tar.gz "http://download.redis.io/releases/redis-4.0.11.tar.gz"
RUN tar -xzf redis-4.0.11.tar.gz -C /usr/src/redis
RUN cd /usr/src/redis/redis-4.0.11 && make && make PREFIX=/usr/local/redis install
之前说过,Dockerfile 中每一个指令都会建立一层, RUN 也不例外。每一个 RUN 的行为,就和刚才我们手工建立镜像的过程一样:新建立一层,在其上执行这些命令,执行结束后, commit这一层的修改,构成新的镜像。使用 Dockerfile 定制镜像
而上面的这种写法,创建了很多层镜像。这是完全没有意义的,而且很多运行时不需要的东西,都被装进了镜像里,比如编译环境、更新的软件包等等。结果就是产生非常臃肿、非常多层的镜像,不仅仅增加了构建部署的时间,也很容易出错。 这是很多初学
Docker 的人常犯的一个错误。Union FS是有最大层数限制的,比如 AUFS,曾经是最大不得超过 42 层,现在是不得超过 127 层。
导出容器
导出容器可以导出一个已经创建的容器到一个文件,不管容器处于什么状态,可以使用docker export 命令。 命令格式为:docker export [-o|--output[=""]] CONTATINER 其中可以通过-o来指定导出的tar文件名,也可以直接通过重定向来实现。
另一种格式为:docker export 容器 id/name > 文件名.tar
导入容器
导入的文件可以使用docker import 命令导入变成镜像,该命令的格式为:
docker import [-c|--change[=[]]] [-m|--message[=MESSAGE]] file|URL|-[REPOSITORY[:YAG]]
其中-c 选项可以在导入的同时执行对容器进行修改的Dockerfile指令(网络等修改)
另外 docker save&load 命令也可以导入一个镜像存储文件,但是跟 docker import 命令是有区别的
用 export&import 还是 save & load ?
export&import 和 save & load 是 docker 中的两组命令,我们先主要看看他们的区别:
类型 | 导出的对象 | 导出文件大小 | 是否可回滚到历史层 |
---|---|---|---|
export & import | 将容器导出 | 小 | 否 |
save & load | 用来将一个或者多个 image 打包 | 大 | 是 |
相对于文件大小来说,save方式导出的文件比export方式导出的文件大
正是因为save方式保存了镜像的历史和层(layer),使其可以层回滚,即回滚到之前的历史层,所以save方式导出的文件稍微大一些
反观export方式,在导出过程中丢失所有的历史,导致其不可以层回滚,导出的文件会小一些
可以通过 docker history 镜像名 看到层关系
3.2、容器网络
Docker 安装后,默认会创建下面三种网络类型
docker network ls
查看默认的网络
在启动容器时使用 --network bridge
指定网络类型
bridge:桥接网络
默认情况下启动的 Docker 容器,都是使用 bridge,Docker 安装时创建的桥接网络,每次 Docker 容器重启时,会按照顺序获取对应的 IP 地址,这个就导致重启下,Docker 的 IP 地址就变了
none:无指定网络 使用 --network=none ,docker
容器就不会分配局域网的 IP
host: 主机网络 使用 --network=host,此时,Docker 容器的网络会附属在主机上,两者是互通的。 例如,在容器中运行一个 Web 服务,监听 8080 端口,则主机的 8080 端口就会自动映射到容器中
3.3、 指定自定义网络
因为默认的网络不能制定固定的地址,所以我们将创建自定义网络,并指定网段(IP 可以理解为 4 组 8 个二进制组成的一段代码,然后右侧网段的 24 是指锁定前面 24 位,也就是说生成的 IP 会是 192.168.1.X,1-255):192.168.1.0/24 并命名为 mynetwork,指令如下:
docker network create --subnet=192.168.1.0/24 mynetwork
使用此 docker 镜像 创建容器
代码如下:
docker run -itd --name redis-master --net mynetwork -p 6380:6379 --ip 192.168.1.2 redis
参数说明: 具体可以参看一些文档
http://www.runoob.com/docker/docker-run-command.htmlhttp://www.dockerinfo.net/docker%E5%AE%B9%E5%99%A8-2
-d: 后台运行容器,并返回容器ID; -i: 以交互模式运行容器,通常与 -t 同时使用; -p: 端口映射,格式为:主机(宿主)端口:容器端口 -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用; -V: 为容器挂载目录,比如 /usr/docker/data:/data 前者为数宿主机目录后者为容器内目录 --ip: 为容器制定一个固定的ip --net: 指定网络模式 这样,我们创建了2个容器,来一起查看下结果 docker ps -a 查看容器ip地址 docker network inspect mynetwork
docker build -t redis-test . #在文件夹中用默认的 Dockerfile 创建镜像
docker images #查看当前 docker 镜像
docker history 625dcdca8ecb #查看某个镜像的历史
docker ps -a #查看当前运行的容器
docker run -itd -p 8001:80 -v xxx1:xxx2 --name redis-master redis-test #使用镜像(redis-test)运行容器(redis-master) 宿主机 8001 端口映射到容器 80 端口 宿主机 xxx1 地址与容器 xxx2 地址共享(容器写入 xxx2 的数据同样会出现在宿主机的 xxx1 里)
docker rm 538265c49277 #移除容器
docker exec -it redis-master bash #进入容器 (如果出现:OCI runtime exec failed: exec failed: container_linux.go:348: starting container process caused "exec: \"bash\": executable file not found in $PATH": unknown ,那么就把 bash 改为 sh :docker exec -it redis-master sh)
docker stop $(docker ps -a -q) #停止全部容器(-q 返回容器 id)
docker rm $(docker ps -a -q) #移除所有容器
docker rmi $(docker images -q) #删除所有镜像
docker export f4092a93c312 > nginx-jzy.tar #docker export 容器 id > 文件名.tar 导出容器(镜像快照)
docker import nginx-jzy.tar nginx-jzy:v2 #使用镜像快照创建镜像,创建的镜像没有 history
docker run -itd --name nginx-jzy-v2 e70d288bc4ef bash #使用上面创建的镜像创建容器,这里必须要有 bash 或者其他可以被挂载的进程
docker save a68a3617e7dd > nginx-jzy-save.tar #保存镜像
docker rmi a68a3617e7dd #删除镜像,因为上面导出容器使用的是这个镜像,所以生成了一个依赖这个镜像的镜像 删除失败了(Error response from daemon: conflict: unable to delete a68a3617e7dd (cannot be forced) - image has dependent child images)
docker image inspect --format=''{{.RepoTags}} {{.Id}} {{.Parent}}'' $(docker image ls -q --filter since=a68a3617e7dd) #找出 from 这个镜像的子镜像([nginx-jzy:v2] sha256:e70d288bc4ef3f20015ca839653c1c1555ee7b2524e4085845348c7d990eb998)
docker rmi -f e70d288bc4ef #删除子镜像失败(Error response from daemon: conflict: unable to delete e70d288bc4ef (cannot be forced) - image is being used by running container be7eea6f8a9b)
docker stop be7eea6f8a9b #停止容器
docker rm be7eea6f8a9b #删除容器
docker rmi -f e70d288bc4ef #删除子镜像成功
docker rmi a68a3617e7dd #删除镜像成功
docker load < nginx-jzy-save.tar #读取保存的镜像文件(生成的镜像文件是有 history 的)
docker inspect imageid #查看镜像详情
docker network ls #查看网络列表
docker network inspect id1 #查看网络 id 为 id1 的信息
docker network create --subnet=192.168.1.0/24 redis-network #新增网络连接方式(增加网段)
docker run -itd --name redis-test2 --network=redis-network --ip 192.168.1.3 -p 6381:6379 -v /usr/docker/redis/conf/:/usr/src/redis/conf/redis #根据之前的 redis 镜像生成 redis-test2 容器 使用自定义的 redis-network 网络,指定 ip(必须在网段内),指定端口映射,指定共享文件夹
iptables -t nat -L -n #查看桥接网络
1. 为什么系统镜像那么小呢? 因为 docker 镜像在运行的时候直接使用 docker 宿主机器的 kernel,Linux 操作系统由内核空间和用户空间组成。
内核空间是 kernel,用户空间是 rootfs, 不同 Linux 发行版的区别主要是 rootfs. 比如 Ubuntu 14.04 使用 upstart 管理服务,apt 管理软件包; 而 CentOS 7 使用 systemd 和 yum。这些都是用户空间上的区别,Linux kernel 差别不大。所以 Docker 可以同时支持多种 Linux 镜像, 模拟出多种操作系统环境。容器共同使用镜像的内容(如果发生更改先复制镜像层到容器层然后再修改)
2. 镜像的文件如何存储的?
镜像文件是分层存储的,我们可以通过 docker history 命令查看到镜像的历史,也就是层
启动镜像的时候,一个新的可写层会加载到镜像的顶部。这一层通常称为 “容器层”, 之下是 “镜像层”。
容器层可以读写,容器所有发生文件变更写都发生在这一层。镜像层 read-only, 只允许读取。
Container 最上面是一个可写的容器层,以及若干只读的镜像层组成,Container 的数据就存放在这些层中,这样的分层结构最大的特性是 Copy-On-Write (写时复制):
新数据会直接存放在最上面的 Container 层。
修改现有的数据会先从 Image 层将数据复制到容器层,修改后的数据直接保存在 Container 层,Image 层保持不变。
3. 启动的容器会占用大量空间吗?
创建镜像的时候,分层可以让 docker 只保存我们添加和修改的部分内容。其他内容基于 base 镜像,不需要存储,读取 base 镜像即可。如此,当我们创建多个镜像的时候,所有的镜像共享 base 部分。节省了磁盘空间
docker 通过一个叫做 copy-on-write (CoW) 的策略来保证 base 镜像的安全性,以及更高的性能和空间利用率
简单的说,启动容器的时候,最上层容器层是可写层,之下的都是镜像层,只读层。
当容器需要读取文件的时候:从最上层镜像开始查找,往下找,找到文件后读取并放入内存,若已经在内存中了,直接使用。(即,同一台机器上运行的 docker 容器共享运行时相同的文件)。
当容器需要添加文件的时候:直接在最上面的容器层可写层添加文件,不会影响镜像层。
当容器需要修改文件的时候:从上往下层寻找文件,找到后,复制到容器可写层,然后,对容器来说,可以看到的是容器层的这个文件,看不到镜像层里的文件。容器在容器层修改这个文件。
当容器需要删除文件的时候:从上往下层寻找文件,找到后在容器中记录删除。即,并不会真正的删除文件,而是软删除。
综上,Docker 镜像通过分层实现了资源共享,通过 copy-on-write 实现了文件隔离。
docker - 基础命令
docker 容器,只能启动一个指定的程序,程序结束,容器退出
查看命令: docker --help
docker run --name centos -d -h centos --rm -v /opt/:/opt/ wenbronk/centos /bin/bash
总得来说,docker 的命令为以下几种:
- 容器生命周期管理 —
docker [run|start|stop|restart|kill|rm|pause|unpause]
- 容器操作运维 —
docker [ps|inspect|top|attach|events|logs|wait|export|port]
- 容器 rootfs 命令 —
docker [commit|cp|diff]
- 镜像仓库 —
docker [login|pull|push|search]
- 本地镜像管理 —
docker [images|rmi|tag|build|history|save|import]
- 其他命令 —
docker [info|version]
1, 镜像操作:
1, 搜索镜像
docker search alpine
2, 下载镜像
docker pull apline
3, 查看镜像
docker images
4, 删除镜像
docker rmi apline
2, 容器操作
1), 启动容器:
a), 输出 hellowork, 运行后立马退出
docker run centos /bin/echo ''helloworld''
b), 打开终端并保持在容器中
docker run --name centos -d -it centos /bin/bash
参数解释: --name: 指定运行名字,
--i: 始终保持链接状态
-t: 打开伪终端并绑定在 docker 上
/bin/bash: 需要执行的命令
运行的时候,会先检测有没有镜像,没有的话自动 pull 下载
c), 后台运行: 加 -d
d), 端口映射:不加的话,随机映射,使用:
-p 主机端口: 容器端口
docker run -d --name nginx -p 81:80 nginx
使用 -p ip:hostPort:containerPort 可以指定主机的多个 ip:port
也可以使用 -p 指定多个 端口
2, 停止容器
docker stop CONTAINER_ID | CONTAINE_NAME
3, 查看容器
docker ps -a # -a指查看所有, 不加只查看正在运行的
4, 进入容器
docker exec -it /bin/bash CONTAINER_NAME
docker attach CONTAIN_ID: 进入后退出, 容器会退出
-i: 始终打开链接
-t: 打开伪终端使用绑定在 docker 上
/bin/bash: 需要 docker 容器运行的命令
使用更好的方式进入容器
需要工具包:
yum install -y util-linux
查看 docker 的 pid
docker inspect --format "{{.State.Pid}}" CONTAINER_ID | CONTAINER_NAME
使用 nsenter 进入容器
nsenter --target 23907 --mount --uts --ipc --net --pid
写成脚本链接进容器:
# /bin/bash
CNAME=$1
if [ ! -n "$1" ]; then
echo the param CONTAINER_ID or CONTAINER_NAME is must
exit 0
fi
CPID=$(docker inspect --format "{{.State.Pid}}" $CNAME)
nsenter --target "$CPID" --mount --uts --ipc --net --pid
5, 启动已经终止的程序
docker start CONTAIN_ID
6, 删除容器
docker rm
7, 保存正在运行的容器
docker commit -m ''yourtags'' CONTAINER_ID wenbronk/CONTANER_NAME
3, docker 数据管理
数据卷是经过特殊设计的容器,可绕过联合文件系统 (UTS), 为一个或多个容器提供服务
目的是数据的永久化,完全独立于容器生命周期,不会存在类似垃圾回收机制
数据卷容器: --volumes-
数据卷: -v /data -v src:dst: 将数据直接写在物理机上,也可以挂载文件到容器中
可添加 -v /data:/opt/nginx/log:ro 添加 ro 参数 使得容器内只读
可通过 docker inspect CONTAINER_ID 查看是否挂载数据卷
1, 挂载目录或文件,到 docker 容器中
docker run -d --name=tomcat -v /b2b:/test -it centos /bin/bash
此时操作本地的 /b2b 目录,就会在 docker 容器下看到 相应的文件管理
会自动创建 /b2b 目录
2, dockerfile 种创建数据卷
dockerfile 中使用 [VOLUME] 挂载数据卷,但不可以是本地存在的,启动时会创建相同名字的数据卷
相同镜像的不同容器,创建的数据卷不同,因此使用数据卷容器
3, 可以使用 volumes-from 参数,将 docker 容器启动为数据卷容器
命名的容器挂载数据卷,其他容器通过挂载容器挂载数据卷,
# 启动一个容器作为数据卷容器
docker run -it -v /b2b:/test --name dataTest centos /bin/bash
# 启动两外两个容器链接数据卷
docker run -it --volumes-from dataTest --name db1 centos
docker run -it --volumes-from dataTest --name db2 centos
这样 db1 和 db2 都可以访问该目录,且做的更改对其他容器是可见的
即使删除了容器 dataTest, db1, 和 db2 也可以正常进行数据共享,数据卷容器的存在仅仅为了配置信息传递
避免暴露服务器真是路径
4, 数据备份和恢复
备份
docker run --volumes-from dbdata -v $(pwd):/backup --name worker centos tar zcf /backup/backup.tar.gz /dbdata
创建数据卷容器:
docker run -v /dbdata/dbdata --name db centos /bin/bash
进行数据恢复
docker run --volumes-from db -v $(pwd):/backup centos tar xf /backup/backup.tar.gz
Docker CLI 实战指南:从基础命令到 Dockerfile 构建和 Docker Compose
Docker 学习路线 11:Docker命令行
Docker CLI (命令行界面) 是一个强大的工具,可让您与 Docker 容器、映像、卷和网络进行交互和管理。它为用户提供了广泛的命令,用于在其开发和生产工作流中创建、运行和管理 Docker 容器和其他 Docker 资源。
安装
要开始使用 Docker CLI,您需要在计算机上安装 Docker。您可以从 Docker 文档的官方安装指南中按照您所使用的操作系统进行安装。
基本命令
以下是一些基本的 Docker CLI 命令,供您熟悉:
docker run
:从 Docker 映像创建并启动容器docker container
:列出正在运行的容器docker image
:列出系统中所有可用的映像docker pull
:从 Docker Hub 或其他注册表拉取映像docker push
:将映像推送到 Docker Hub 或其他注册表docker build
:从 Dockerfile 构建映像docker exec
:在正在运行的容器中运行命令docker logs
:显示容器的日志
Docker Run 选项
docker run
是 Docker CLI 中最重要的命令之一。您可以使用各种选项自定义容器的行为,例如:
d, --detach
:在后台运行容器e, --env
:为容器设置环境变量v, --volume
:绑定挂载卷p, --publish
:将容器的端口发布到主机name
:为容器指定名称restart
:指定容器的重启策略rm
:容器退出时自动删除容器
Dockerfile
Dockerfile 是一个包含构建 Docker 映像的指令的脚本。您可以使用 Docker CLI 使用 Dockerfile 构建、更新和管理 Docker 映像。
以下是 Dockerfile 的一个简单示例:
# Set the base image to use
FROM alpine:3.7
# Update the system and install packages
RUN apk update && apk add curl
# Set the working directory
WORKDIR /app
# Copy the application file
COPY app.sh .
# Set the entry point
ENTRYPOINT ["./app.sh"]
要构建映像,请使用以下命令:
docker build -t my-image .
Docker Compose
Docker Compose 是一个 CLI 工具,用于使用 YAML 文件定义和管理多容器 Docker 应用程序。它与 Docker CLI 协作,提供了一种一致的方式来管理多个容器及其依赖项。
使用官方的安装指南安装 Docker Compose,然后您可以创建一个 docker-compose.yml
文件来定义和运行多容器应用程序:
version: ''3''
services:
web:
image: webapp-image
ports: - "80:80"
database:
image: mysql
environment: - MYSQL_ROOT_PASSWORD=my-secret-pw
使用以下命令运行应用程序:
docker-compose up
总之,Docker CLI 是管理 Docker 容器和资源的强大而多才多艺的工具。一旦熟悉其命令和功能,您将能够轻松开发、维护和部署使用 Docker 的应用程序。
Docker镜像
Docker镜像是一种轻量级、独立、可执行的软件包,其包含了运行应用程序所需的所有组件。这些组件包括:依赖项、库、运行时、系统工具和代码等,以确保应用程序在不同的环境中可以保持一致地运行。
Docker镜像是使用Dockerfile进行构建和管理的。Dockerfile是一个包含了创建Docker镜像所需指令的脚本,提供了一个逐步设置应用程序环境的指南。
使用Docker镜像
Docker CLI提供了多个命令来管理和使用Docker镜像。其中一些重要的命令包括:
docker image ls
:列出本地系统上所有可用的镜像。docker build
:从Dockerfile构建镜像。docker image rm
:删除一个或多个镜像。docker pull
:从注册表(如Docker Hub)将镜像拉到本地系统。docker push
:将镜像推送到仓库。
例如,要从Docker Hub拉取官方的Ubuntu镜像,可以运行以下命令:
docker pull ubuntu:latest
拉取镜像后,可以使用docker run
命令创建和运行一个使用该镜像的容器:
docker run -it ubuntu:latest /bin/bash
这个命令将创建一个新的容器,并使用**/bin/bash
** shell在容器内启动一个交互式会话。
共享镜像
Docker镜像可以使用容器注册表(如Docker Hub、Google Container Registry或Amazon Elastic Container Registry(ECR))共享和分发。一旦将您的镜像推送到注册表中,其他人就可以轻松地访问和使用它们。
要共享您的镜像,您首先需要使用适当的命名格式对其进行标记:
docker tag <image-id> <username>/<repository>:<tag>
然后,您可以使用以下命令将标记的镜像推送到注册表中:
docker push <username>/<repository>:<tag>
总之,Docker镜像是Docker生态系统中不可或缺的一部分,允许开发人员打包其应用程序、轻松地共享它们,并在不同的环境中确保一致性。通过理解Docker镜像和管理它们的命令,您可以利用容器化的力量,增强您的开发工作流程。在您的开发过程中使用Docker镜像可以大大提高开发效率,减少开发过程中的问题,让您能够更好地专注于应用程序的核心开发。
容器
容器可以被视为轻量级的、独立的可执行软件包,包括运行所需的所有东西,包括代码、运行时、库、环境变量和配置文件。容器将软件与其环境隔离开来,确保其在不同环境下工作一致。
为什么使用容器?
- 可移植性:容器确保应用程序在不同平台上一致工作,无论是开发人员的笔记本电脑还是生产服务器。这消除了“它在我的机器上运行”的问题。
- 效率:容器很轻量级,因为它们使用共享资源,没有完整操作系统的开销。这使得启动时间更快,减少资源使用。
- 可扩展性:容器可以根据工作量轻松地进行缩放,因此非常适合分布式应用程序和微服务。
- 一致性:容器使得开发人员、QA 和运维团队在整个应用程序生命周期中拥有一致的环境,从而加快了部署流程。
- 安全性:容器提供了一定程度的隔离,使其与其他容器和底层主机系统隔离开来,有助于维护应用程序的安全性。
使用 Docker CLI 工作
Docker CLI 提供了多个命令,可帮助您创建、管理和与容器交互。一些常用命令包括:
docker run
:用于创建和启动新容器。docker container ls
:列出运行中的容器。docker container stop
:停止运行中的容器。docker container rm
:删除已停止的容器。docker exec
:在运行中的容器中执行命令。docker logs
:获取容器的日志,有助于调试问题。
Docker卷
Docker卷是一种用于存储Docker容器生成和使用的数据的机制。它们允许您将数据与容器本身分开,从而轻松备份、迁移和管理持久性数据。
卷的重要性
Docker容器本质上是暂时的,这意味着它们可以轻松地停止、删除或替换。尽管这对应用程序开发和部署非常有利,但处理持久性数据时会带来挑战。这就是卷的作用。它们提供了一种将数据存储和管理与容器的生命周期分开的方法。
卷的类型
Docker中有三种类型的卷:
- 主机卷:它们存储在主机机器的文件系统中,通常位于
/var/lib/docker/volumes
目录中。这些可以很容易地访问,但可能会带来可移植性或文件系统兼容性问题。 - 匿名卷:这些是在运行容器时没有指定卷时自动生成的。它们的ID由Docker生成,也存储在主机机器的文件系统中。
- 命名卷:与匿名卷类似,命名卷也存储在主机机器的文件系统中。但是,您可以提供自定义名称,这样在其他容器中引用或备份时更容易。
使用Docker CLI管理卷
Docker CLI提供了各种命令来管理卷:
docker volume create
: 使用给定的名称创建新卷。docker volume ls
: 列出系统中的所有卷。docker volume inspect
: 提供有关特定卷的详细信息。docker volume rm
: 删除卷。docker volume prune
: 删除所有未使用的卷。
要在容器中使用卷,可以在docker run
命令期间使用-v
或--volume
标志。例如:
docker run -d --name my-container -v my-named-volume:/var/lib/data my-image
此命令使用“my-image”映像创建一个名为“my-container”的新容器,并在容器内部将“my-named-volume”卷挂载到/var/lib/data
路径。
Docker 网络
Docker 网络提供了管理容器通信的重要方法。它允许容器使用各种网络驱动程序相互通信并与主机机器通信。通过理解和利用不同类型的网络驱动程序,您可以设计容器网络以适应特定的场景或应用程序需求。
网络驱动程序
Docker 中有几个可用的网络驱动程序。这里,我们将介绍四个最常见的驱动程序:
- bridge:容器的默认网络驱动程序。它创建了一个私有网络,容器可以相互通信并与主机机器通信。在此网络上的容器可以通过主机网络访问外部资源。
- host:该驱动程序取消了网络隔离并允许容器共享主机的网络。在网络性能至关重要的情况下,它非常有用,因为它最小化了容器网络的开销。
- none:该网络驱动程序禁用容器网络。使用此驱动程序的容器在没有任何网络访问的隔离环境下运行。
- overlay:该网络驱动程序使部署在不同主机上的容器能够相互通信。它专为 Docker Swarm 设计,并且非常适合多主机或基于集群的容器部署。
管理 Docker 网络
Docker CLI 提供了各种命令来管理网络。以下是一些有用的命令:
- 列出所有网络:
docker network ls
- 检查网络:
docker network inspect <network_name>
- 创建新网络:
docker network create --driver <driver_type> <network_name>
- 将容器连接到网络:
docker network connect <network_name> <container_name>
- 将容器与网络断开连接:
docker network disconnect <network_name> <container_name>
- 删除网络:
docker network rm <network_name>
最后
为了方便其他设备和平台的小伙伴观看往期文章:
微信公众号搜索:Let us Coding
,关注后即可获取最新文章推送
看完如果觉得有帮助,欢迎 点赞、收藏、关注
Docker 介绍及基础命令
Docker 简介
Docker 是一个开源项目,诞生于 2013 年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。 项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议,项目代码在 GitHub 上进行维护。
Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud 公司后来都改名为 Docker Inc。Redhat 已经在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 产品中广泛应用。
Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC)等技术。在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。
为什么用docker
作为一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。
Docker 在如下几个方面具有较大的优势:
- 更快速的交付和部署
Docker在整个开发周期都可以完美的辅助你实现快速交付。Docker允许开发者在装有应用和服务本地容器做开发。可以直接集成到可持续开发流程中。
例如:开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。 Docker 可以快速创建容器,快速迭代应用程序,并让整个过程全程可见,使团队中的其他成员更容易理解应用程序是如何创建和工作的。 Docker 容器很轻很快!容器的启动时间是秒级的,大量地节约开发、测试、部署的时间。
- 高效的部署和扩容
Docker 容器几乎可以在任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。 这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
Docker的兼容性和轻量特性可以很轻松的实现负载的动态管理。你可以快速扩容或方便的下线的你的应用和服务,这种速度趋近实时。
- 更高的资源利用率
Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起 10 个虚拟机,而Docker 只需要启动 10 个隔离的应用即可。
- 更简单的管理
使用 Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。
docker --version 产看版本
docker images 查看所有环境
docker load -i ''D:\Docker Toolbox\centos.tar'' 离线安装环境 路径为环境iso文件
docker save -o D:/data/centos1.tar centos 将环境导出 导出的的位置 环境名称
docker run -it centos /bin/bash 启动环境 环境名称 git路径
cat /proc/self/cgroup | head -1 在容器内查看编号
docker commit 11c9da5be2a6 my_centos 保存镜像,提交操作 参数一为运行容器id 第二个参数是保储容器的容器名称
docker ps 显示当前运行的容器id
docker rmi -f b5ef 强制删除容器
docker stop 5de65 停止服务 参数我容器id
清除缓存
docker ps -a | grep "Exited" | awk ''{print $1 }''|xargs docker stop
docker ps -a | grep "Exited" | awk ''{print $1 }''|xargs docker rm
我们今天的关于Docker 基础命令和docker基础命令的分享已经告一段落,感谢您的关注,如果您想了解更多关于1.docker 学习笔记之入门,docker 在 centos7 下的安装以及基础命令的使用、docker - 基础命令、Docker CLI 实战指南:从基础命令到 Dockerfile 构建和 Docker Compose、Docker 介绍及基础命令的相关信息,请在本站查询。
本文标签: