docker 学习笔记
Docker 基础知识
1 | docker run ubuntu:15.10 /bin/echo "Hello world" |
参数含义:
docker
:Docker 的二进制执行文件。run
:与前面的 docker 组合来运行一个容器。ubuntu:15.10
:指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。/bin/echo "Hello world"
:在启动的容器里执行的命令
1 | docker run -i -t ubuntu:15.10 /bin/bash |
参数含义:
-t
:在新容器内指定一个伪终端或终端。-i
:允许你对容器内的标准输入stdin
进行交互- 可以通过运行
exit
命令或者使用ctrl+D
来退出容器,会导致容器停止
1 | docker run -d -P training/webapp python app.py |
-d
:让容器在后台运行。-P
:将容器内部使用的网络端口随机映射到我们使用的主机上。
1 | docker commit <CONTAINER ID> <REPOSITORY> |
参数含义:-a
:提交的镜像作者;-c
:使用Dockerfile指令来创建镜像;-m
:提交时的说明文字;-p
:在commit时,将容器暂停
commend | result |
---|---|
docker ps |
查看正在运行的容器 |
docker ps -a |
查看所有容器 |
docker stop <CONTAINER ID/REPOSITORY> |
关闭容器 |
docker logs <CONTAINER ID/REPOSITORY> |
查看容器内的标准输出 |
docker pull <IMAGE_NAME> |
载入镜像 |
docker restart <CONTAINER ID> |
重启停止的容器 |
docker attach <CONTAINER ID> |
进入后台运行中的容器 |
docker exec <CONTAINER ID> |
退出容器,不会导致容器的停止 |
docker export <CONTAINER ID> > xxx.tar |
导出本地某个容器 |
`cat docker/xxx.tar | docker import - |
docker import <URL> <EPOSITORY> |
导入容器快照 |
docker rm -f <CONTAINER ID> |
删除容器-f :强制删除;-no-prune :不要删除未带标签的父镜像 |
docker container prune |
清理掉所有处于终止状态的容器 |
docker rm $(docker container ls -aq) |
删除所有容器 |
docker commit <CONTAINER ID> <REPOSITORY> |
把容器打包成镜像 |
docker inspect <REPOSITORY>:<CONTAINER ID> |
查看镜像的详细信息 |
docker rm $(docker container ls -f "status=exited" -q) |
同时删除多个符合筛选条件(状态为“exited”)的容器 |
Docker 复杂操作合集
端口映射
1 | docker run -it -p 8080:18026 <REPOSITORY>:<TAG> /bin/bash |
-p
:是容器内部端口绑定到指定的主机端口。这里指将主机的8080端口映射到容器的18026端口。-p可以多个端口映射同时存在以实现复杂功能
1 | docker run -it -p 127.0.0.1:8080:18026 <REPOSITORY>:<TAG> /bin/bash |
这样我们就可以通过访问 127.0.0.1:8080 来访问容器的 18026 端口。
上面的例子中,默认都是绑定 tcp 端口,如果要绑定 UDP 端口,可以在端口后面加上 /udp。
1 | docker run -it -p 127.0.0.1:8080:18026/udp <REPOSITORY>:<TAG> /bin/bash |
docker port <CONTAINER ID> <PORT>
命令可以让我们快捷地查看端口的绑定情况。
代码调试
centos的依赖cmake/gcc/gdb/gdb-gdbserver/openssh-server/openssh-clients
docker要以特权模式启动
1 | docker run -d --privileged=true -v /Users/liuxing1/Files/Docker_Files/Shared\ Folders/:/tmp -p 8080:22 -p 8000:18080 mdm_docker /usr/sbin/init |
然后通过docker exec -it <Container_ID> /bin/bash
进入容器操作
启动sshd服务
1 | #启动 |
容器和本机互传文件
首先需要确定 docker 容器的container_id
,可以使用docker ps -a
查看你要操作的 docker 容器的container_id
容器向本机传送文件
1 | docker cp container_id:docker容器内的文件全路径 本机保存文件的全路径 |
例如:docker cp 4a2f08d2c1f8:/data1/configure.txt E:\PHP\configure.txt
本机向容器传送文件
1 | docker cp 本机保存文件的全路径 container_id:docker容器内的文件全路径 |
例如:docker cp E:\PHP\configure.txt 4a2f08d2c1f8:/data1/configure.txt