#docker服务操作
service docker stop #停止
service docker start #启动
service docker restart #重启
#查询所有的镜像
docker imagas
docker image ls
#删除指定的镜像
docker image rm [镜像id]
docker rmi [镜像id]
#查询所有的容器-container(包含退出的)
docker ps -a
docker container ls -a
#查询正在运行的容器
docker container ls
docker ps
#删除指定的容器(容器id可以不用写全,只写一部分能区分的就可以)
docker container rm [容器id]
docker rm [容器id]
#查询所有容器的id
docker container ls -aq
#删除所有的容器
docker rm $(docker container ls -aq)
#查询已经退出去的容器id
docker container ls -f "status=exited" -q
#删除已经退出去的容器
docker rm $(docker container ls -f "status=exited" -q)
#交互运行容器
docker run -it [容器名]
#运行容器
docker run [容器名]
docker run -d [容器名] #后台运行容器
docker run -d --name=demo [容器名] #后台运行容器且命名为demo
--link=[容器名a] #直接可以在当前容器内用a访问容器名a
-e Mysql=5.5 #用-e可以直接把参数写进容器
#把容器commit成一个镜像
docker commit [容器名] [镜像名:tag]
#进入到运行中的容器里面
docker exec -it [容器id] /bin/bash
执行的命令
#进入容器后
env #可以查看容器的变量参数
#停止正在运行的容器
docker container stop [容器id/容器名]
docker stop [容器id/容器名]
#启动已经停止的容器
docker container start [容器id/容器名]
docker start [容器id/容器名]
#重启正在运行的容器
docker container restart [容器id/容器名]
docker restart [容器id/容器名]
#查看容器信息
docker container inspect [容器id/容器名]
#查看命令信息
docker <run/container/image> --help
#Dockerfile语法(参考Dockerfile reference)
FROM scratch #基础镜像
LABEL version="1.0" #元数据/标签 不可少,例:作者
RUN yum install -y vim #linux命令,每多一条run就会多一层image,最好是命令写在一行,用&&符号并用,用\反斜线换行。(执行命令并创建新的Image Layer)
WORKDIR /root #工作目录,如果没有会自动创建,如果有多个WORKDIR,从上往下依次生成目录(中间没有用绝对路径的时候);不要用RUN cd,尽量使用绝对目录
ADD hello / #把hello执行文件添加到根目录下,例 ADD test.tar.gz / 添加到根目录并解压(也就是不仅仅可以添加还可以解压缩)
COPY hello test/ #复制文件到指定的路径:大部分情况下copy优于add,添加远程文件/目录请使用curl或者wget(RUN CURL *****)
ENV MYSQL_VERSION 5.6 #设置常量 例: RUM apt-get install -y mysql-server="${MYSQL_VERSION}"
VOLUME #存储
EXPOSE 5000 #网络,把运行的容器端口暴露出来
CMD #设置容器启动后默认执行的命令和参数;如果docker run指定了其他命令,CMD命令被忽略;如果定义了多个CMD,只有最后一个会执行。
ENTRYPOINT #设置容器启动时运行的命令;让容器以应用程序或者服务的形式运行;不会被忽略,一定会执行;最佳实践,写一个shell脚本作为entrypoint,例 COPY start.sh /usr/local/bin/ ENTRYPOINT ["start.sh"]
#Shell和Exec格式
Shell格式
RUM apt-get install -y vim
CMD echo "hello docker"
ENTRYPOINT echo "hello docker"
Exec格式
RUN ["apt-get","install","-y","vim"]
CMD ["/bin/echo","hello docker"]
ENTRYPOINT ["/bin/echo","hello docker"]
#限制容器的cpu和内存(docker run --help 里面的参数)
docker run --cpu-shares=10 --memory=200M [容器名]
# cpu占用权重
#docker network(网络)
docker network ls
单机
bridge network
docker network create -d bridge my-bridge #创建一个指定的 bridge网络
# 如果2个容器都 加入到用户 自定义的bridge 就会自动link 能够ping 通,如果是系统自带的 bridge0 就需要link才可以ping通
host network
#直接用的就是主机的网络
none network
#只能内部用
多机
overlay network
docker network create -d overlay demo
#volume 持久卷
docker volume ls # 查询所有的持久卷
docker volume rm [id] # 删除指定的持久卷
docker VOLUME inspect [id] #查询持久卷详情
docker rum -v mysql:/var/lab/mysql # 名称:映射路径 来使用
-v /home/aaa:/root/aaa # 例
#docker compose(批处理)
#1、是一个工具 (命令行工具)
#2、可以通过一个yml文件管理多个docker容器
#3、有一个默认的名字 docker-compose.yml。当然也可以修改名称
#services
#1、一个service代表一个container,这个container可以从dockerhub的image来创建,
或者从本地的Dockerfile build出来的image来创建。
#2、service的启动类似docker run,我们可以给其指定network和volume,
所以可以给service指定network和volume的引用。
#networks
#volumes
#docker-compose 命令
docker-compose up #创建容器并启动
-f [文件名] #如果不加 -f 默认就是docker-compose.yml文件
-d #后台运行
docker-compose down #停止容器并删除(包含创建的network)
docker-compose start #启动已经存在的容器
docker-compose stop #停止容器
docker-compose exec <service> base #进入执行的容器中
docker-compose ps #查看当前容器列表信息