本篇文章给大家谈谈Docker常用指令,以及docker常用指令的知识点,同时本文还将给你拓展14-Dockerfile常用指令、Docker-01常用指令、参数配置速查表、docker-Docke
本篇文章给大家谈谈Docker 常用指令,以及docker常用指令的知识点,同时本文还将给你拓展14-Dockerfile常用指令、Docker - 01 常用指令、参数配置速查表、docker - Dockerfile 常用指令、Docker - 初学实用指令记录等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:- Docker 常用指令(docker常用指令)
- 14-Dockerfile常用指令
- Docker - 01 常用指令、参数配置速查表
- docker - Dockerfile 常用指令
- Docker - 初学实用指令记录
Docker 常用指令(docker常用指令)
查看信息
docker ps -a 查看当前所有容器状态
docker images 查看当前系统中可用的镜像,注意在使用时,需加:tag 除非你想使用最新的镜像 latest
docker logs -f [container_name|container_id] 跟踪日志类似于 tail -f
删除容器
docker rm [container_name|id] 删除已停止的容器,如果想要强制删除未停止的容器,可加 - f
也可以 docker rm `docker ps -a -q` 删除所有已停止的容器
docker rm contained_id1 contained_id2... 删除多个已停止的容器
删除镜像
docker rmi [image_name|id] 删除镜像
启动一个容器
docker run -ti [image_name|id] [要执行的非守护进程的命令] -ti 前台进行
例如:docker run -it -p 8080:8080 tomcat-test:v1 /bin/bash
docker run -d [image_name|id] [要执行的非守护进程的命令] -d 后台进行
例如:docker run -d -p 8080:8080 tomcat-test:v1 /root/run.sh
执行也已启动的容器(类似上面)
docker exec -ti [已运行的容器名或 id] [要执行的非守护进程的命令] -ti 前台进行
docker exec -d [已运行的容器名或 id] [要执行的非守护进程的命令] -d 后台进行
启停容器
docker start [已停止的容器名字或 id]
docker stop [已启动的容器名字或 id]
启动容器的用法及说明
docker run [--name String] [-v localpath:containerpath] --privileged=true [-p port [:port]]-d [image_name|id] [要执行的非守护进程的命令] -d 后台进行
--name 为要启动的容器命名
-v localpath:containerpath 为容器挂载一个文件,譬如把容器内的程序日志挂载出来,方便查看
-d 运行的容器后台运行
-ti 运行的容器前台运行
-p [port] 或 [port:port] 为容器内的服务映射端口,影射后可以通过访问系统对应端口访问容器内的服务
--privileged=true 给容器加文件权限
docker 互相拷贝文件
docker cp local_path/local_file:container_name/container_path/container_file
例如:docker cp /opt/soft/tomcat/apache-tomcat 234dsdsf:/opt/soft/tomcat/
docker cp container_name/container_path/container_file:local_path/local_file
docker pull 镜像
拉取仓库中的某个镜像,默认拉取最新版,也可以指定 tag
docker commit [已停止的容器] [镜像名字] 将已做修改 (且已停止) 的容器重新提交为镜像
docker save -o tomcat-test_v1.tar tomcat-test:v1 存出镜像到本地文件
docker load --input tomcat-test_v1.tar 载入本地文件到本地镜像库
参看书籍:
《Spring Cloud 与 Docker 微服务架构实战》 的 Docker 部分
《Docker 技术入门和实战》
14-Dockerfile常用指令
下面列出了 Dockerfile 中最常用的指令,完整列表和说明可参看官方文档。
FROM
指定 base 镜像。
MAINTAINER
设置镜像的作者,可以是任意字符串。
COPY
将文件从 build context 复制到镜像。
COPY 支持两种形式:
-
COPY src dest
-
COPY ["src", "dest"]
注意:src 只能指定 build context 中的文件或目录。
ADD
与 COPY 类似,从 build context 复制文件到镜像。不同的是,如果 src 是归档文件(tar, zip, tgz, xz 等),文件会被自动解压到 dest。
ENV
设置环境变量,环境变量可被后面的指令使用。例如:
...
ENV MY_VERSION 1.3
RUN apt-get install -y mypackage=$MY_VERSION
...
EXPOSE
指定容器中的进程会监听某个端口,Docker 可以将该端口暴露出来。我们会在容器网络部分详细讨论。
VOLUME
将文件或目录声明为 volume。我们会在容器存储部分详细讨论。
WORKDIR
为后面的 RUN, CMD, ENTRYPOINT, ADD 或 COPY 指令设置镜像中的当前工作目录。
RUN
在容器中运行指定的命令。
CMD
容器启动时运行指定的命令。
Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效。CMD 可以被 docker run 之后的参数替换。
ENTRYPOINT
设置容器启动时运行的命令。
Dockerfile 中可以有多个 ENTRYPOINT 指令,但只有最后一个生效。CMD 或 docker run 之后的参数会被当做参数传递给 ENTRYPOINT。
下面我们来看一个较为全面的 Dockerfile:
注:Dockerfile 支持以“#”开头的注释。
构建镜像:
① 构建前确保 build context 中存在需要的文件。
② 依次执行 Dockerfile 指令,完成构建。
运行容器,验证镜像内容:
① 进入容器,当前目录即为 WORKDIR。
如果 WORKDIR 不存在,Docker 会自动为我们创建。
② WORKDIR 中保存了我们希望的文件和目录:
目录 etc:由 ADD 指令从 build context 复制的归档文件 etc.tar.gz,已经自动解压。
文件 tmpfile1:由 RUN 指令创建。
文件 tmpfile2:由 COPY 指令从 build context 复制。
③ ENV 指令定义的环境变量已经生效。
Docker - 01 常用指令、参数配置速查表
目录
- 01 Docker 常用指令、参数配置速查表
- 02 Dockerfile 指令速查表
- 03 Docker Compose 指令速查表
Docker - 01 常用指令、参数配置速查表
Centos7 安装 Docker
阿里镜像安装
官方repo地址被墙,所以我用阿里
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新并安装 Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo systemctl start docker
加速
国内镜像慢,所以我用阿里
sudo mkdir -p /etc/docker
sudo vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://xxxxxxx.mirror.aliyuncs.com"]
}
sudo systemctl daemon-reload
sudo systemctl restart docker
- 使用镜像加速器
- 加速器地址
命令速查表
常用度排序
镜像操作
功能 | 命令 |
---|---|
拉取镜像 | docker pull [镜像名称:版本] |
镜像列表 | docker images |
删除镜像 | docker rmi [镜像名称:版本] |
镜像操作记录 | docker history [镜像名称:版本] |
给镜像设置新的仓库 | docker tag [镜像名称:版本] [新镜像名称:新版本] |
查看镜像详细 | docker inspect [镜像名称:版本] |
搜索镜像 | docker search [关键字] |
仓库登录 | docker login |
docker tag 指令得到了一个新的,和原来的镜像一模一样的镜像。后续文谈到私仓非常有用。
容器操作
功能 | 命令 |
---|---|
启动容器并进入 | docker run -ti --name [容器名称] [镜像名称:版本] bash |
容器列表 | docker ps -a |
容器提交为新的镜像 | docker commit [容器名称] my_image:v1.0 |
容器后台运行 | docker run -d --name [容器名称] [镜像名称:版本] bash -c "echo hello world" |
容器结束后自动删除 | docker run --rm --name [容器名称] [镜像名称:版本] bash -c "echo hello world" |
删除容器 | docker rm [容器名称] |
进入容器 exec | docker exec -ti [容器名称] bash |
进入容器 attach | docker attach [容器名称] |
停止容器 | docker stop [容器名称] |
Docker 日志 | docker logs [容器名称] |
查看容器详细 | docker inspect [容器名称] |
查看容器最近一个进程 | docker top [容器名称] |
继续运行被停止的容器 | docker restart [容器名称] |
暂停一个容器进程 | docker pause [容器名称] |
取消暂停 | docker unpause [容器名称] |
终止容器 | docker kill [容器名称] |
端口映射 | docker run -ti --name [容器名称] -p 8080:80 [镜像名称:版本] bash |
容器互联 | docker run -ti --name [容器名称] --link [被互联容器名称]:[容器内名称] net:v1.0 bash |
复制容器文件到宿主 | docker cp [容器名称]:[容器内目录] . |
-
exec
与attach
区别
在 exec 里面执行 exit 命令,你只是关掉了 exec 命令新开的进程,而主进程依旧在运行,所以容器并不会停止
在 attach 里面运行 exit 命令,你实际是终止了主进程,所以容器也就随之被停止了
-
-p
配置
-p hostPort:containerPort 映射所有 IP 地址上的指定端口到容器内部
-p ip:hostPort:containerPort 映射指定 IP 地址上的指定端口到容器内部
-p ip::containerPort 映射指定 IP 地址上的任意端口到容器内部
内存限制
参数 | 简介 |
---|---|
-m, - -memory | 内存限制,格式:数字+单位,单位可以是b, k, m, g,最小4M |
-- -memory-swap | 内存和交换空间总大小限制,注意:必须比-m参数大 |
CPU限制
参数 | 简介 |
---|---|
-- -cpuset-cpus="" | 允许使用的CPU集 |
-c,- -cpu-shares=0 | CPU共享权值 |
-- -cpu-quota=0 | 限制CPU CFS配额,必须不小于1ms,即>=1000 |
cpu-period=0 | 限制CPU CFS调度周期,范围是100ms~1s,即[1000, 1000000] |
sudo docker run -ti --cpuset-cpus="1,3" --name cpuset [镜像名称:版本] bash
比如下面的指令指定容器进程可以在 CPU1 和 CPU3 上运行
数据卷
功能 | 命令 |
---|---|
创建一个卷 | docker run -ti --name [容器名称] -v /[数据卷名称] [镜像名称:版本] bash |
删除一个数据卷 | docker rm -v [数据卷名称] |
挂载宿主目录 | docker run -ti --name [容器名称] -v [宿主目录]:[容器内目录] [镜像名称:版本] bash |
数据卷容器 | docker run -ti -d -v /[数据卷名称] --name [数据卷容器名称] [镜像名称:版本] |
使用数据卷容器 | docker run -ti --volumes-from [数据卷容器名称] --name [新容器名称] [镜像名称:版本] bash |
清除所有 | docker volume prune |
备份数据卷 1 - 建立容器 | docker run -it --name vol_simple -v /data ubuntu /bin/bash |
备份数据卷 2 - 备份 | docker run --rm --vloumes-from vol_simple -v$(pwd):/backup ubuntu tar cvf /backup/data.tar /data |
恢复数据卷 1 - 建立目标容器 | docker run -it --name vol_bck -v /data ubuntu /bin/bash |
恢复数据卷 2 - 解压 | docker run --rm --volumes-from vol_bck -v $(pwd):/backup ubuntu tar xvf /backup/data.tar -C / |
备份数据卷: 指令启动了一个临时的容器,这个容器挂载了两个volume,第一个volume与要备份的volume共享,第二个volume将宿主机的当前目录挂载到容器的/backup下。容器运行后将要备份的内容(/data文件夹)备份到/backup/data.tar,然后删除容器,备份后的data.tar就留在了当前目录。恢复数据卷: 首先运行了一个新容器作为数据恢复的目标。第二行指令启动了一个临时容器,这个容器挂载了两个volume,第一个volume与要恢复的volume共享,第二个将宿主机的当前目录挂载到容器的/backup下。由于之前备份的data.tar在当前目录下,那么它在容器中的/backup也能访问到,容器启动后将这个存档文件中的/data恢复到跟目录下,然后删除容器,恢复后的数据在vol_bck的volume中了。
参考
- docker
- docker-cn
© 会煮咖啡的猫咪
docker - Dockerfile 常用指令
FROM
指定 base images
FROM centos:7.4.1708
MAINTAINER
设置镜像的作者
MAINTAINER work.hugo.huang@gmail.com
我们设置了镜像的作者后,可以通过 docker inspect 命令查看镜像的信息,里面包含有作者信息。
[root@localhost dockerfile-instruction]# docker inspect c89334650819
[
{
"DockerVersion": "18.03.1-ce",
"Author": "work.hugo.huang@gmail.com",
...忽略其它信息
"Metadata": {
"LastTagTime": "2018-11-12T22:05:51.772312473+08:00"
}
}
]
COPY
复制本地主机的 src 到容器中的 dest ,src 必须在上下文中,一般情况下,将本地主机的一个包含 Dockerfile 的目录中的所有内容作为上下文,如 docker/install。当使用本地目录为源目录时,推荐使用 COPY 。
下面的 /root/dockerfile-instruction 是 build context
COPY /root/dockerfile-instruction/install /app/install
ADD
与 COPY 类似,不同的是,如果 src 的文件是 identity, gzip, bzip2,xz,tar.gz,tgz 等类型的文件将被添加 tar -x 命令,进行解压
EXPOSE
向外界暴露端口。这样就可以通过容器的 ip 地址 + port 访问到容器。
在这里,我们不得不提 docker run 命令中的 -p 参数。docker run 中的 - p 参数是对容器中的端口映射到 host 端口中,这样我们既可以通过容器的 ip 地址 + port 访问,也可以通过 host 的 IP + 端口访问到容器中的服务。
举个例子:
有一个 helloworld 的 springboot 服务,写了一个 dockerfile 文件,暴露了 8080 端口
FROM openjdk:8u181-jdk-alpine
VOLUME /app/springboot-docker
ADD springboot-docker-1.0.jar /app/springboot-docker/app.jar
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app/springboot-docker/app.jar"]
当我们通过 dockerfile 构建镜像并通过命令运行后
docker run -d --name springboot-docker springboot-docker
我们可以通过以下命令获取到容器的 IP 地址
docker inspect springboot-docker
这时,我们可以通过下面的命令访问到服务,172.17.0.2 是该容器的 IP
curl 172.17.0.2:8080/home
CMD
容器启动时运行指定的命令,CMD 指令支持的格式
- CMD ["executable","param1","param2"] 。推荐格式
- CMD ["param1","param2"] 。为 ENTRYPOINT 指令提供参数,此时的 ENTRYPOINT 指令需要使用 Exec 格式。其用途是为 ENTRYPOINT 指令设置默认的参数
- CMD command param1 param2 。执行 shell 内部命令
每个 Dockerfile 最多只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。如果用户通过 dcoker run
命令启动容器,将会覆盖掉 CMD 指定的参数代替。
下面以格式(1)距离说明,格式(2)将在 ENTRYPOINT 指令中举栗子。
Dockerfile 如下,最后一行加入了 CMD 命令
FROM centos:7.4.1708
MAINTAINER work.hugo.huang@gmail.com
CMD ["/bin/bash","-c","echo hello,docker"]
当我们运行该容器时,它会马上运行最后的命令。
[root@localhost dockerfile-instruction]# docker run -it dockerfile-instruction
hello,docker
如果通过下面的命令运行 docker,则 CMD 参数会被替代
[root@localhost dockerfile-instruction]# docker run -it dockerfile-instruction echo bye
bye
ENV
设置环境变量,它可作用的其它指令:
ADD
COPY
ENV
EXPOSE
FROM
LABEL
STOPSIGNAL
USER
VOLUME
WORKDIR
也就是说,在这些指令中,可以通过 ${ENV_VALUE} 替换
WORKDIR
设置工作目录,设置了工作目录,它将会作用于该指令后面的 RUN
, CMD
, ENTRYPOINT
, COPY
, ADD 指令。
Docker - 初学实用指令记录
docker pull image_name:tags - 获取镜像
docker run -it image_name:tags [Command] - 进入镜像
exit - 退出镜像
docker image ls - 查看镜像
仓库名
、标签
、镜像 ID
、创建时间
以及 所占用的空间
docker system df - 查看镜像、容器、数据卷所占用的空间
docker image ls -a - 中间层镜像
docker exec -it webserver bash - 进入容器
docker run --name NEW_NAME -d -p 服务器端口:容器端口 镜像
关于Docker 常用指令和docker常用指令的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于14-Dockerfile常用指令、Docker - 01 常用指令、参数配置速查表、docker - Dockerfile 常用指令、Docker - 初学实用指令记录的相关信息,请在本站寻找。
本文标签: