1 安装
$ wget -qO- https://get.docker.com/ | sh /* 下载与安装 */
$ curl -sSL https://get.docker.com/ | sh /* 和上面的二选一 */
$ sudo usermod -aG docker username /* 允许username启动docker */
$ reboot /* 重启 */
$ sudo service docker start /* 启动服务 */
$ docker run hello-world /* 测试hellworld */
$ sudo vim /etc/docker/daemon.json /* 配置镜像仓库,写入以下内容 */
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
$ service docker restart /* 重启服务 */
2 hellworld
2.1 helloworld
$ docker run ubuntu:18.10 /bin/echo "Hello world" /* 本地没有镜像时,自动拉取,取决于网速,会失败 */
2.2 与镜像交互
$ docker run -i -t ubuntu:18.10 /bin/bash /* 与容器交互 */
# exit /* 退出交互 */
2.3 后台启动
$ docker run -d ubuntu:18.10 /bin/sh -c "while true; do echo hello world; sleep 1; done" /* 后台启动 */
$ docker ps /* 查看运行的容器,回显包括id与name */
$ docker logs <id>/<name> /* 查看容器内的输出 */
$ docker stop <id>/<name> /* 停止容器 */
3 容器的使用
3.1 基本命令
$ docker /* 查看docker的命令选项 */
$ docker stats --help /* 查看stats的使用帮助 */
3.2 运行web应用
$ docker pull training/webapp # 载入镜像
$ docker run -d -P training/webapp python app.py /* 在镜像中以后台模式运行应用, -d:让容器在后台运行, -P:将容器内部使用的网络端口映射到主机上 */
$ docker run -d -p 5000:5000 training/webapp python app.py /* 指定端口运行 */
$ docker ps /* 查看运行的容器,回显包括id与name */
$ docker port /*查看容器的主机端口,docker ps 也包含端口信息 */
$ docker logs -f <id>/<name> /* 查看web应用日志,-f: 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出。 */
$ docker top <id>/<name> /* 查看容器内的进程 */
$ docker inspect <id>/<name> /* 查看容器的配置信息 */
$ docker stop <id>/<name> /* 停止容器 */
$ docker start <id>/<name> /* 重启已经停止的容器 */
$ docker rm <id>/<name> /* 移除已经停止的容器 */
4 镜像的使用
$ docker images /*查看本地镜像 */
$ docker pull ubuntu:18.10 /* 拉取ubuntu18.10镜像 */
$ docker search httpd /* 搜索httpd镜像 */
4.1 创建镜像
$ docker run -t -i ubuntu:18.10 /bin/bash /* 启动容器 */
# apt-get update /* 在容器内更新,或者做其它更改 */
# exit /* 退出容器 */
$ docker commit -m="<description>" -a="<author>" <id> <targetName>:<version> /* 提交副本 */
4.2 构建镜像
$ cat Dockerfile /* 创建docker文件 */
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
$ docker build -t <targetName> <dockerFilePath> /* 创建镜像 */
4.3 设置镜像标签
$ docker tag <image id> <repository name>:<tag> /* 设置标签 */
5 容器连接
5.1 端口映射
$ docker run -d -P training/webapp python app.py /* 使用随机端口 */
$ docker run -d -p 5000:5000 training/webapp python app.py /* 指定主机端口 */
$ docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py /* 指定IP和端口 */
$ docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py /* 指定udp端口 */
$ docker port <image name> <port> /* 查看主机端口 */
5.2 容器命名
$ docker run -d -P --name <name> training/webapp python app.py /* 容器命名 */
6 文件
6.1 在容器与宿主机之间拷贝文件
$ docker cp --help
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
6.2 挂载数据卷
docker run -v <宿主path>:<容器path> --name <name> <image>:<version>
7 说明
本文的命令直接拷贝粘贴执行的话,如果出错,可能是空格格式不对,重新替换一下空格即可。
8 批量删除
删除所有已经停止的容器
docker rm $(docker ps -a -q)
删除所有未打 dangling 标签的镜像
docker rmi $(docker images -q -f dangling=true)
删除所有镜像
docker rmi $(docker images -q)
强制删除镜像名称中包含“doss-api”的镜像
docker rmi --force $(docker images | grep doss-api | awk '{print $3}')
9 查看容器的ip
docker inspect -f='{{.Name}} {{.NetworkSettings.IPAddress}} {{.HostConfig.PortBindings}}' $(docker ps -aq)
10 保存与加载
docker save -o file.tar image
docker load -i file.tar