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
2
3
4
5
6
7
8
#启动
systemctl start sshd

#设置开机自启动
systemctl enable sshd

#设置密码
passwd

容器和本机互传文件

首先需要确定 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