基本命令
# 查看docker的image
docker images
# 获取imager
docker image pull nginx
## 删除img
docker rmi id
# 运行
## 交互运行
docker run -it ubuntu
# -p 映射端口, -d 后台运行
docker run -p 8080:80 -d nginx
# 查看正在运行的服务
docker ps
docker ps -a # 查看历史记录
# 拷贝文件到容器中// nginx默认目录是/usr/share/nginx/html
docker cp index.html 容器ID://usr/share/nginx/html
# 停止运行
docker stop ID
# 停止后再次运行原来拷贝的会丢失
# 使用commit保存后可在images中查看
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。
docker commit -m "提交说明" -a "silas" f6e029f9f5a5 mynginx:v1
Dockerfile
github上的示例
FROM
From scratch # 制作base image(尽量使用官方image作为base image)
FROM centos
From ubuntu:14.04
Label
打标签
LABEL maintainer="Silas"
LABEL version="1.0"
LABEL description="This is description"
RUN
为了美观复制的RUN使用反斜线换行!
避免无用分层,合并多行命令成一行
RUN yum updata && yum install -y vim \
python-dev # 反斜线换行
WORKDIR
用workdir,不用用RUN cd!尽量使用绝对目录
WORKDIR /test # 没有/test会自动创建/test
WORKDIR demo
RUN pwd # 此时会输出 /test/demo
ADD or COPY
大部分情况COPY由于ADD!ADD还有额外解压缩功能!添加远程使用curl或wget
ADD TEST.tar.gz / # 添加到根目录并解压
ENV
尽量使用,增加可维护性!
ENV MYSQL_VERSION 5.6 # 设置常量
RUN apt-get install -y mysql-server = "${MYSQL_VERSION }"\
&& rm -rf /var/lib/apt/lists/* # 引用常量
CMD && ENTRYPOINT
RUN:执行命令并创建新的image layer
CMD:设置日期启动后默认执行的命令和参数
docker run 制定了其他命令,CMD会被忽略,定义多个只有最后一个会被执行
ENTRYPOINT:设置日期启动时运行的命令
不会被忽略,移动会执行
镜像发布
docker login # 登录
docker push rudefish/helloworld:latest # 提交
可登录查看
拉取到本地docker pull rudefish/helloworld:latest
# 创建一个文件Dockerfile
FROM alpine:latest
MAINTAINER Silas
CMD ecjo "Hello world!"
# 编译
docker build -t myfile ./
# 运行
docker run myfile
现在本地生成一个打印helloworld的可执行文件,在加到image的/下,然后执行
FROM scratch
ADD DockerWork /
CMD ["/DockerWork"]
编写一个安装vim后的dockerfiles文件
FROM centos
RUN yum install -y vim
其他人拿到dockerfile后到本地build即可
docker container
#查看
docker container ls -a
# 简写
docker ps -a
# 删除一个
docker rmi ID
# 删除全部
1、查看所有>docker container ls -a
2、查看所有的ID>docker container ls -aq
3、删除>docker rm $(docker container ls -aq)
# 删除status位exited的
docker rm $(docker container ls -f "status=exited" -q)
Rggistry
# 搜索镜像
docker search nginx
搭建私人dockerhub
搜索registry
docker run -d -p 5000:5000 --restart always --name registry registry:2
push
# 重新编译
docker build -t ip:port/hrllo-world .
建立可信连接
1、 在 /etc/docker/下新建一个文件
{"insecure-registries":["ip:port"]} > /etc/docker/deamon.json
2、 编辑docker启动文件
vi /lib/systemd/system/docker.service
添加一行: EnvironmentFile = /etc/docker/daemon.json
3、 重启docker
4、验证
pull后查看ip:pore/v2/_catelog