参考Docker 环境搭建docker
1.查看镜像:docker imagesshell
2.从registry下载镜像(默认的源是Docker Hub):docker pull [USERNAME/]IMAGE[:tag]ubuntu
3.查看某个镜像构建的层次:docker history IMAGEvim
4.为镜像命名:docker tag [old_repositry]:[old_tag] [new_repositry]:[new_tag]网络
5.上传镜像到Docker Hub上: docker push [USERNAME]/repositry:tag测试
注:上传前要登录:docer login -u USERNAMEui
6.删除Docker host中的镜像:.net
1.删除一个镜像:docker rmi IMAGErest
2.删除所有镜像:docker rmi $(docker images -q)code
1.若某些镜像对应的容器处于run状态或者处于stop状态,则不能删除镜像。
解决办法:删除镜像对应的容器:rm
2.若两个镜像的IMAGE ID同样,这不能删除所有镜像。
解决办法:逐个删除镜像。
7.搜索Docker Hub中的镜像: docker search IMAGE
Dockerfile是镜像的描述文件。构建Dockerfile的一些指令:
1.FROM IMAGE:表示以IMAGE为基础,从而构建构建更高层次的镜像。
例:FROM scratch:不以任何镜像为基础。
注:通常以base镜像为基础:Ubuntu,Debian,CentOS
2.ADD: 从build context复制文件到镜像。若文件时压缩包,则自动解压。
3.COPY:将build context中复制文件到镜像。
1.COPY src dest
2.COPY ["src", "dest"]
注:src只能是build context中的文件或目录。
4.ENV:设置环境变量
例如:ENV MY_VERSION 1.3
RUN apt install -y mypackage=$MY_VERSION (MY_VERSION被替换成1.3)
5.EXPOSE:指定暴露的端口。
6.WORKDIR:指定容器当前的工做目录。
7.RUN:运行特定的指令。
8.CMD:容器启动时运行的指令,多个指令只有最后一个生效。CMD能被RUN参数替换。
9.ENTRYPOINT:跟CMD同样,不同的时CMD 和 docker run后的参数会传给ENTRYPOINT。不会被RUN后参数替换。
注:DOCERFILE有两种模式:Shell和Exec模式。
1.shell模式:<instruction> <command>
2.exec模式:<instruction> ["executable", "param1", "param2", ...]
10.MAINTAINER:镜像的做者。
1.docker commit 命令
构建步骤:
1.运行容器
例如:docker run -it --name=ubuntu_test ubuntu
2.修改容器
例如:apt install -y vim
3.保存为新的镜像
例如:docker commit ubuntu_test ubuntu-vim
2.dockerfile 构建文件
docker built -t IMAGE_NAME .
注:-t表示打一个tag标签。
1.启动容器:
1.docker run [OPTIONS] IMAGE [COMMAND]:建立并运行容器。
例如:docker run -d -p 80:80 httpd
-d:之后台方式运行
-p:指定端口
2.docker create IMAGE: 只建立容器,不运行。
2.查看正在运行的容器:
1.docker ps
2.docker container ls
3.指定容器名字:--name "CONTAINER_NAME"
4.进入容器的方法:
1.docker attach CONTAINER_NAME:进入容器,不能建立新进程
2.docker exec CONTAINER_NAME op:进入容器,能够建立新进程。
5.查看容器的输出:docker log -f CONTAINER
6.中止正在运行的容器:
1. docker stop/kill CONTAINER:占用CPU
2. docker pause CONTAINER: 不占用CPU
7.运行处于中止状态的容器:
1. docker start CONTAINER
2. docker unpause CONTAINER
8.重启容器:
1.restart = stop + start
2.--restart=always:不管容器何种缘由退出,当即重启容器。
3.--restart=on-failure:3,若启动的进程退出并返回非0值,最多重启3次
9.重启容器:
docker rm CONTAINER
参考容器操做图
1.内存限制:
1. -m 或 --memory: 随着以内存的使用限额。
例如: -m 300M
2.--memory-swap: 内存+swap的使用限额。
例如:-memory-swap 400M
2.CPU限制:-c 或 --cpu-shares
例如:docker run --name "NAME1" -c 1024 IMAGE
docker run --name "NAME2" -c 512 IMAGE:表示1号容器使用CPU时间是2号容器的2倍。
注:--cpu 1:表示有1颗CPU
3.限制磁盘读写速度:--blkio-weight
例如:docker run -it --name CONTAINER_A --blkio-weight 600 IMAGE
docker run -it --name CONTAINER_B --blkio-weight 300 IMAGE
注:
--device-read-bps
,限制读某个设备的 bps。 --device-write-bps
,限制写某个设备的 bps。 --device-read-iops
,限制读某个设备的 iops。 --device-write-iops
,限制写某个设备的 iops。
例如:docker run -it --device-write-bps /dev/sda:30MB IMAGE:限制对设备的写速度不超过30MB
--network=none : 表示除了lo网卡(ip=172.0.0.1,用于回环测试),没有其余任何网卡。通常用在高机密的应用中。
例如:docker run -it --network=none ubuntu /bin/sh
--network=host:表示与主机host分享ip。
不指定network表示建立一个新的网络接口,挂到docker0上。图
1.查看网桥名以及接口:brctl show
2.查看网桥的详细信息(包括ip):docker network inspect BRIDGE
1.建立一个自定义的网络驱动:docker network create --driver bridge my_net
2.指定自定义网桥的ip网段(sub-net)以及网关(gateway):--subnet和--gateway
3.使用自定义的网桥:--network=MY_NET
4.使用自定义网桥时指定静态ip:--ip。注意:只有指定--sub_net才能指定静态ip。
两个容器若要通讯,必需要有属于同一网络的网卡。
1.在一个容器中建立一个网卡,挂在MY_NET上:docker network connect MY_NET CONTAINER图
2.docker的自定义网络自带DNS Sever服务,所以能够将ip换成容器名进行通讯:
docker run -it --network=MY_NET --name=CONTAINER IMAGE
注:bridge网络没有DNS Server功能。
3.使用joined容器方法让两个容器共享网卡信息和配置信息:
docker run -it --network=container:CONTAINER IMAGE,这样新产生的容器能够共享CONTAINER的网络信息。
好处:可使用lo的ip地址让两个容器通讯。