docker-基本使用
安装
问题:connect: permission denied
当前用户添加到docker属组即可
sudo groupadd docker |
基本信息
Docker 是服务器—-客户端架构
本机需要有服务运行,如果没有运行使用下面命令启动
# service 命令的用法 |
container 本身也是个文件,停止运行不会删除,
# 列出本机正在运行的容器 |
查看容器信息
docker inspect containerID |
mac 下的保存路径/Users/{YourUserName}/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
可以使用软连接放到别的地方
mv ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/ /otherPath/com.docker.driver.amd64-linux |
操作实例
下载 ubuntu 16.04 的 image
docker hub 找到 ubuntu 官方镜像,下面是支持的 tag
Supported tags and respective Dockerfile links
18.04, bionic-20180724.1, bionic, latest, rolling (bionic/Dockerfile)
18.10, cosmic-20180725, cosmic, devel (cosmic/Dockerfile)
14.04, trusty-20180712, trusty (trusty/Dockerfile)
16.04, xenial-20180726, xenial (xenial/Dockerfile)
还可以通过 docker search 镜像名 来获取
docker pull ubuntu:16.04 |
看日志
docker logs [OPTIONS] CONTAINER |
配置镜像源
国内访问 Docker 的官方仓库很慢,还经常断线,所以要把仓库网址改成国内的镜像站
网页一直打不开,稍后在处理吧
查看版本
docker version |
查看容器的 IP 地址
docker inspect <container id> |
移除未使用的数据
docker system prune [OPTIONS] |
image 操作
- 查看 image
docker images
- 删除 image
可以同时删除多个 img1 ,img2docker rmi img1 img2
- 删除所有 images
docker rmi $(docker images -q)
- 下载 image
docker pull image-name:image-tag
容器操作
查看容器
docker ps
// 包括未运行的容器
docker ps -allps 参数说明:
a :显示所有的容器,包括未运行的。
f :根据条件过滤显示的内容。
-format :指定返回值的模板文件。
l :显示最近创建的容器。
n :列出最近创建的n个容器。
-no-trunc :不截断输出。
q :静默模式,只显示容器编号。
s :显示总的文件大小。
停止容器
docker stop container-name/id
重新运行容器
docker start container-name/id
删除容器
docker rm container-id
删除所有容器
docker rm $(docker ps -a -q)
容器日志
docker logs container-name / container-id
登录容器
运行中的容器其实是一个功能完备的 Linux 操作系统,所以我们可以像常规的系统一样登录并访问容器。
我们可以使用下面命令,登录访问当前容器,登录后我们可以在容器中进行常规的 Linux 系统操作命令,还可以使用 exit 命令退出登录
下面命令解决 bash 宽度没变化的问题docker exec -e COLUMNS="`tput cols`" -e LINES="`tput lines`" -it container-id/name bash
从容器创建 image
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。样例:
docker commit -a "runoob.com" -m "my apache" a404c6c174a2 mymysql:v1
创建并运行一个容器
最简单的命令,不能交互
docker run --name container-id -d image-name |
添加 it 参数,支持交互
docker run -it --rm ubuntu /bin/bash |
参数:
-p: 端口映射,格式为:主机(宿主)端口:容器端口
–net=”bridge”: 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
–expose=[]: 开放一个端口或一组端口;
-d:后台运行
docker run -d -p 6378:6379 --name port-redis redis |
宿主相关操作
- 获取容器 ip
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container-id/name
docker容器中切换用户
docker容器中切换用户,提示权限不足:
// 启动容器是使用特权启动: |
制作 image
通过 docker commit 制作镜像
是往版本控制系统里提交一次变更。使用这种方式制作镜像,本质上是运行一个基础镜像,然后在基础镜像上进行软件安装和修改。最后再将改动提交到版本系统中。
这个不推荐了,无法看到具体添加的东西,修改也不方便,使用 docker file 更好些
通过 docker build 制作镜像
使用 docker build 创建镜像需要编写 Dockerfile.
编写自己的 Dcokerfile
运行 docker build 命令打包镜像
docker build [OPTIONS] PATH | URL | - |
遇到的问题
- docker制作镜像 apt-get 安装文件报错debconf: unable to initialize frontend: Dialog
解决方法,添加下面设置ARG DEBIAN_FRONTEND=noninteractive
docker files
项目目录下 .dockerignore 写入需要忽略的文件和目录
.git |
ARG
仅在编译时有效参考样例
# docker file for bitcoin/primecoin test node and compile environment 2018.08.09 |
分享你的镜像
以Docker ID登录
docker login |
标记镜像
docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG] |
去掉标记
docker rmi repository:tag |
发布镜像
docker push username/repository:tag |
卸载 docker
在实际使用中,发现还是有些不顺畅的地方,经常卡顿,不知道是不是和资源有关
先删除镜像和容器 |