Docker 基础命令备忘录

本文详细介绍了Docker的基础操作,包括运行、启动、停止、重启容器,拖取和运行镜像,以及如何进行端口绑定、后台运行命令。此外,还讲解了如何进入容器、查看和管理容器,如日志查看、镜像和容器的删除,以及如何通过Dockerfile创建新镜像。Docker简化了软件部署的复杂性,提高了效率。
摘要由CSDN通过智能技术生成

很早之前就对Docker的大名有所耳闻,今日一学,满是欢喜。其容器和虚拟化概念的运用,把部署难度简易到了一个新的里程碑。我手中的项目尚需各种库的支持,凡是要部署到新的系统,都要受其部署的繁琐之苦,更何况是更大的项目。而有了Docker后,这繁琐之苦,算是化为了虚无。

运行

启动交互

runoob@runoob:~$ docker run -t -i ubuntu:15.10 /bin/bash 
root@d77ccb2e5cca:/#
  • -i: 交互式操作。
  • -t: 终端。
  • ubuntu:15.10: 这是指用 ubuntu 15.10 版本镜像为基础来启动容器。
  • /bin/bash: 放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

拖取镜像

runoob@runoob:~$ docker pull httpd

运行镜像

runoob@runoob:~$ docker run httpd

停止容器

runoob@runoob:~$ docker stop wizardly_chandrasekhar   
wizardly_chandrasekhar

重启容器

runoob@runoob:~$ docker start wizardly_chandrasekhar
wizardly_chandrasekhar

后台运行命令和端口绑定

docker run -d -P <Image-Name> python app.py
docker run -d -p 5000:5000  <Image-Name> python app.py
  • -d 让容器在后台运行。
  • -P 是容器内部端口随机映射到主机的高端口。
  • -p 是容器内部端口绑定到指定的主机端口。

上面的例子中,默认都是绑定 tcp 端口,如果要绑定 UDP 端口,可以在端口后面加上 /udp。

进入容器

  • docker attach
  • docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。

attach

docker attach 1e560fca3906  # 注意: 如果从这个容器退出,会导致容器的停止。

exec

docker exec -it 243c32535da7 /bin/bash

docker 宿主机与容器直接文件移动命令

将容器中的文件复制到宿主机

我们把容器中的 nginx 目录整个复制到 宿主机/usr/local/nginx 目录下,使用如下命令:

docker cp nginx_test: /etc/nginx /usr/local/nginx

将宿主机文件复制到容器中

我们把宿主机目录(/usr/local/nginx/a.key)下的a.key 复制到容器(nginx_test)的/etc/nginx 目录下,使用如下命令:

docker cp /usr/local/nginx/a.key nginx_test:/etc/nginx

查看

查看日志

runoob@runoob:~$ docker logs -f bf08b7f2cd89
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
192.168.239.1 - - [09/May/2016 16:30:37] "GET / HTTP/1.1" 200 -
192.168.239.1 - - [09/May/2016 16:30:37] "GET /favicon.ico HTTP/1.1" 404 
  • -f 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出。

列出本地镜像列表

runoob@runoob:~$ docker images

查看容器内部运行进程

docker top

runoob@runoob:~$ docker top wizardly_chandrasekhar
UID     PID         PPID          ...       TIME                CMD
root    23245       23228         ...       00:00:00            python app.py

查找镜像

runoob@runoob:~$  docker search httpd

网络端口的快速查看

CONTAINER ID

runoob@runoob:~$ docker port bf08b7f2cd89
5000/tcp -> 0.0.0.0:5000

NAMES

runoob@runoob:~$ docker port wizardly_chandrasekhar
5000/tcp -> 0.0.0.0:5000

查询最后一次创建的容器

#  docker ps -l 
CONTAINER ID        IMAGE                             PORTS                     NAMES
bf08b7f2cd89        training/webapp     ...        0.0.0.0:5000->5000/tcp    wizardly_chandrasekhar

查看Docker底层信息

runoob@runoob:~$ docker inspect wizardly_chandrasekhar
......

删除

删除镜像

$ docker rmi hello-world

删除容器

docker rm -f <容器ID>

移除容器

runoob@runoob:~$ docker rm wizardly_chandrasekhar  
wizardly_chandrasekhar

删除容器时,容器必须是停止状态,否则会报如下错误

runoob@runoob:~$ docker rm wizardly_chandrasekhar
Error response from daemon: You cannot remove a running container bf08b7f2cd897b5964943134aa6d373e355c286db9b9885b1f60b6e8f82b2b85. Stop the container before attempting removal or force remove

清理所有终止状态的容器

docker container prune

创建镜像

当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。

  • 从已经创建的容器中更新镜像,并且提交这个镜像
  • 使用 Dockerfile 指令来创建一个新的镜像

更新镜像

runoob@runoob:~$ docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu
sha256:70bf1840fd7c0d2d8ef0a42a817eb29f854c1af8f7c59fc03ac7bdee9545aff8
  • -m: 提交的描述信息

  • -a: 指定镜像作者

  • e218edb10161: 容器 ID

  • runoob/ubuntu 指定要创建的目标镜像名

构建镜像

runoob@runoob:~$ cat Dockerfile 
FROM    centos:6.7
MAINTAINER      Fisher "fisher@sudops.com"

RUN     /bin/echo 'root:123456' |chpasswd
RUN     useradd runoob
RUN     /bin/echo 'runoob:123456' |chpasswd
RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE  22
EXPOSE  80
CMD     /usr/sbin/sshd -D
  • 每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
  • 第一条FROM,指定使用哪个镜像源。
  • RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。
  • 使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。
runoob@runoob:~$ docker build -t runoob/centos:6.7 .
Sending build context to Docker daemon 17.92 kB
Step 1 : FROM centos:6.7
 ---&gt; d95b5ca17cc3
Step 2 : MAINTAINER Fisher "fisher@sudops.com"
 ---&gt; Using cache
 ---&gt; 0c92299c6f03
Step 3 : RUN /bin/echo 'root:123456' |chpasswd
 ---&gt; Using cache
 ---&gt; 0397ce2fbd0a
Step 4 : RUN useradd runoob
......
  • -t : 指定要创建的目标镜像名
  • . : Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

设置镜像标签

我们可以使用 docker tag 命令,为镜像添加一个新的标签。

runoob@runoob:~$ docker tag 860c279d2fec runoob/centos:dev

docker tag 镜像ID,这里是 860c279d2fec ,用户名称、镜像源名(repository name)和新的标签名(tag)。

使用 docker images 命令可以看到,ID为860c279d2fec的镜像多一个标签。

导入导出

导入导出容器

导入

可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu

$ cat docker/ubuntu.tar | docker import - test/ubuntu

此外,也可以通过指定 URL 或者某个目录来导入,例如:

$ docker import http://example.com/exampleimage.tgz example/imagerepo

导出

$ docker export 1e560fca3906 > ubuntu.tar
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值