标签:使用 临时 后台 进入容器 linux中 source 选择 写入 添加
1, 命令: docker pull NAME[:TAG]。(描述镜像需要使用名称+标签)
docker pull ubuntu:18.04
2, 如果不指定标签也就是TAG,那会默认选择最新版本的镜像
3, 非官方仓库下载,需要制定完整仓库名称
docker pull hub.c.163.com/public/ubuntu:18.04
4, 使用代理
在docker服务启动配置中加上--registry-mirror=proxy URL
来指定代理服务地址。
1,查看本机镜像
docker images
或者docker image ls
2, 使用tag命令添加镜像标签
docker tag ubuntu:latest myubuntu:latest
3, 使用inspect命令查看详细信息
docker [image] inspect ubuntu:18.04
docker search [option] keyword
示例: docker search --filter=is-official=true nginx
示例: 搜索收藏数超过4的关键词包括TensorFlow的镜像
docker search --filter=stars=4 tensorflow
1,使用标签删除镜像
格式: docker rmi [IMAGE...] 其中IMAGE可以是标签或者ID
docker rmi
或者 docker image rm
参数:
-f --force 强制删除镜像,即使有容器依赖于他
-no-prune 不要清理未带标签的父镜像
例如,要删除掉myubuntu:latest的镜像
docker rmi myubuntu:latest
当同一个镜像存在多个标签的时候,docker rmi 仅仅删除了该镜像多个标签中的指定标签,并不影响镜像文件。相当于只是删除原本镜像的一个标签副本。
但是当镜像只有一个标签时候,就会删掉镜像
2, 使用镜像ID删除镜像
当使用docker rmi命令后加上镜像的ID,会尝试删除所有指向镜像的标签,然后删除该镜像文件本身
当镜像文件上已经存在容器时,镜像文件默认无法被删除。
3, 清理镜像
docker image prune
来清理临时镜像或者是没有被使用的镜像
参数:
-a, -all 删除所有无用的镜像,不仅仅是临时镜像
-filter 清理符合给定过滤器的镜像
-f, -force 强制清理镜像,并且不提示
例如:自动清理临时的镜像文件层
docker image prune -f
⑤ 创建镜像
创建镜像的方法主要有三种:
基于已有镜像的容器创建、基于本地模板导入、基于Dockerfile创建。
基于已有容器创建
方法: docker [container] commit
命令格式为docker [container] commit [options] container [pepository[:TAG]]
-a, --author="": 作者信息;
-c, --change=[]: 提交的时候执行Dockerfile指令,包括CMD|ENTRYPOINT|ENV|EXPOSE|LABEL|ONBILD|USER|VOLUME|WORKDIR等;
-m --message="":提交消息;
-p, --pause=true:提交时暂停容器运行。
docker run -it ubuntu:18.04 /bin/bash
此时改容器已经和原ubuntu:18.04镜像相比,已经发生改变,可以使用docker [container] commit命令来提交为一个新的镜像。提交时可以使用ID或名称来指定容器:docker [container] commit -m "新的Ubuntu镜像" -a "zhouxiansheng" a9378cdb test:0.1
基于本地模板导入
docker [container] import
cat ubuntu-18.04-x86_64-minimal.tar.gz | docker import - ubuntu:18.04
基于Dockerfile创建
了解即可
容器是Docker的另一个核心概念。简单的说,容器是镜像的一个运行实例。所不同的是,镜像是静态的制度文件,而容器带有运行时需要的可写文件层,同时,容器中的应用进程处于运行状态。
可以使用docker [container] create命令新建一个容器,例如:
docker create -it ubuntu:latest
使用docker [container] create 命令新建的容器处于停止状态,可以使用docker [container] start 命令来启动它;
docker start id
使用docker ps
查看已经启动的命令
除了创建容器后通过start命令来启动,也可以直接新建并启动容器。
所需要的命令主要为docker [container] run,等价于先执行docker [container] create命令,再执行docker [container] start命令。
docker run ubuntu /bin/echo "hello world"
当利用docker [container] run 来创建并启动容器是,Docker在后台的标准操作包括:
启动一个bash终端,允许用户进行交互:
使用exit或者Command + d退出
对于所创建的bash容器,当用户使用exit退出bash进程会后,容器使命完成,也就没有继续运行的必要了
可以使用docker container wait [CONTAINER...]子命令来等待容器退出,并打印退出返回结果。
更多的时候需要让docker以守护态的形式运行。此时通过可以添加-d参数来实现。
docker run -d ubuntu /bin/sh -c "while true; do echo hello; sleep 1;done"
容器启动之后会返回为一个id,也可以通过docker ps 或者docker container ls 来查看容器信息
docker [container] logs
例如:docker logs 10199b99f318c
可以使用docker [container] pause CONTSINER [CONTAINER...] 命令来暂停一个运行中的容器
先启动一个容器
docker run -d --name test --rm -it ubuntu bash
docker pause test
docker stop stop
docker ps -qa
docker start 10199
docker restart 10199
在使用-d参数,容器进入后台进入后台,用户无法看到容器中的信息,也无法进行操作。这个时候如果进入容器进行操作使用attach或者exec命令。
attach命令
attach是Docker自带的命令,命令格式为:
docker [container] attach [--detach-keys[=[]]] [--no-stdin] [--sig-proxy[=true]] CONTAINER
例如:
缺点:当多窗口同时attach到同一个容器的时候;当某一个窗口命令阻塞,其他窗口也无法使用。
exec命令
docker [container] exec [-d|--detach] [--detach-keys[=[]]] [-i|--interactive] [--privileged] [-t|--tty] [-u|--user[=USER]] CONTAINER COMMAND [ARG...]
例如:进入容器中启动一个/bash:
可以使用docker [container] rm 命令来删除处于终止状态或退出状态的容器,命令格式为docker [container] rm [-f|--force] [-l|--link] [-v|--volumes] CONTAINER [CONTAINER...]
docker ps -a
docker rm 10199
1, 查看容器详情
可以使用docker container inspect [OPTIONS] CONTAINER [CONTAINER...]子命令。
2,查看容器内进程
查看容器内进程可以使用docker [container] top [OPTIONS] CONTAINER [CONTAINER...]子命令
这个子命令类似于Linux中的top命令,会打印出容器内的进程信息,包括PID、用户、时间、命令等。例如查看某容器内进程信息,命令如下:
docker top f6
3, 查看统计信息
查看统计信息可以使用docker [container] stats [OPTIONS] [CONTAINER...]子命令
1, 复制文件
docker [container] cp data test:/tmp/
将本地路径data复制到test容器的/tmp路径下:
2, 查看变更
docker container diff test
查看test容器内的数据修改
3, 查看端口映射
container port命令可以查看容器的端口映射情况。命令格式为docker container port CONTAINER
docker container port test
查看test容器的端口映射情况
4, 更新配置
限制总配额为1s,容器test所占时间为10%
docker update --cpu-quota 1000000 test
安装Docker后,可以通过官方提供的registry镜像来简单搭建一套本地私有仓库环境:
docker run -d -p 5000:5000 registry:2
这将自动下载并启动一个registry容器,创建本地的私有仓库服务。
默认情况下,仓库会被创建在容器中的/var/lib/registry目录下。可以通过-v参数来讲镜像文件存放在本地的指定路径。例如:上传镜像放到/opt/data/registry目录:
docker run -d -p 5000:5000 -v /opt/data/registry:/var/libregistry registry:2
此时本地将启动一个私有的仓库服务,监听端口为5000
在生产环境中使用Docker,需要对数据进行持久化,或者需要在多个容器间进行数据共享,这必然涉及到容器的数据管理操作。
容器管理数据的方式有两种
数据卷是一个可供容器使用的特殊目录,他将主机操作系统目录直接映射到容器,类似于Linux的mount行为。
Docker提供volume子命令来管理数据卷,如下命令可以快速在本地创建一个数据卷:
docker volume create -d loacl test
创建一个名为python的自定义容器卷
docker volume ls
查看所有容器卷
docker volume inspect python
查看python容器卷的详细信息
除了使用volume子命令来管理数据卷外,还可以在创建容器时将主机本地的任意数据路径挂在到容器内作为数据卷,这种形式创建的数据卷称为绑定数据卷。
再用docker [container] run命令的时候,可以使用-mount选项来使用数据卷-mount选项支持三种类型的数据卷,包括:
有了自定义容器卷,我们可以创建一个使用这个数据卷的容器,这里我们以nginx为例:
docker run -d -it --name=python -p 8800:80 -v python:/usr/share/nginx/html nginx
使用-v代表挂在数据卷
现在docker run -d -P --name=python --mount type=bind,source=/webapp,destination=/usr/share/nginx/html nginx
如果需要在多个容器间共享一些持续更新的数据,最简单的方式是使用数据卷容器,但是他的目的是专门提供数据卷给其他容器进行挂在
① 创建一个数据容器dba, 并在其中创建一个数据卷挂载到/dba
docker run -it -v /dba --name dba ubuntu
例如:
docker run -it -v /Users/jack_zhou/docker_data_volume --name dba ubuntu
② 在其他容器中使用--volumes-from挂在dba容器中的数据卷
创建db1和db2两个容器,并从dba容器挂在数据卷
docker run -it --volumes-from dba --name dba1 ubuntu
docker run -it --volumes-from dba --name dba2 ubuntu
此时容器db1和容器db2都挂在同一个数据卷到相同的目录,三个容器任何一方在该目录写入,其他容器都能看到。
当然可以多次使用--volumes-from参数从多个容器挂在多个数据卷,还可以从其他已经挂载了容器卷的容器来挂载数据卷。
docker run -d --name db3 --volumes-from db1 training/postgres
注意: 使用--volume-from参数所挂载的数据卷的容器不一定需要在运行。
当然,即使删除挂载的容器,也不会丢失数据卷。除非显式指定docker rm -v
Docker除了通过网络访问,还提供了两种方便的功能来满足访问的基本需求:
在启动容器的时候,如果不指定对应参数,在容器外是无法通过网络来访问容器内的网络应用和服务的。
当容器中运行一些网络应用,要让外部访问这些应用时,可以通过-P或-p参数来指定端口映射。当使用-P标记时,Docker会随机映射一个49000~49900的端口到内部容器开放的网络端口:
docker run -d -P training/webapp python app.py
docker ps -l
此时,可以使用docker ps看到,本地主机的49155被映射到了容器的5000端口。访问宿主主机的49155端口即可访问容器内web应用提供的界面。
使用HostPort:ContainerPort格式本地的5000端口映射到容器的5000端口,即可执行命令如下:
docker run -d -p 5000:5000 training/webapp python app.py
此时默认会绑定本地所有接口上的所有地址。多次使用-p标记可以绑定多个端口。例如:
docker run -d -p 5000:5000 -p 3000:80 training/webapp python app.py
可以使用IP:HostPort:ContainerPort 格式指定映射使用一个特定地址,比如:localhost地址为127.0.0.1:
docker run -d -p 127.0.0.1:5000 training/webapp python app.py
使用IP::ContainerPort绑定loaclhost的任意端口到容器的5000端口,本地主机会自动分配一个端口
docker run -d -p 127.0.0.1::5000 training/webapp python app.py
还可以使用udp标记来指定udp端口:
docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
使用docker port查看当前映射的端口配置,也可以查看到绑定的地址:
docker port nostalgic 5000
当容器有自己的内部网络和IP地址,使用docker [container] inspect + 容器ID可以获取具体信息。
容器的互联是一种让多个容器中的应用进行快速交互的方式。他会在源和接收容器之间创建连接关系,接收容器可以通过容器名快速访问到源容器,而不用指定具体的IP地址。
docker run -d -P --name web tarining/webapp python app.py
注意:
容器名称是唯一的,如果已经命名了一个web的容器,再次命名web的容器,需要先使用docker rm 删除之前的同名容器。
使用--link参数
创建新的容器db
docker run -d --name db training/postgres
删除之前的web容器
docker rm -f web
创建一个新的web容器,并连接到db容器
docker run -d -P --name web --link db:my_db training/webapp python app.py
此时,db容器和web容器建立互联关系
--link 格式为--link name:alias,其中name是容器名称,alias是自己起的别名
标签:使用 临时 后台 进入容器 linux中 source 选择 写入 添加
原文地址:https://www.cnblogs.com/zhoulixiansen/p/12670234.html