安装启动
脚本安装
curl -sSL https://get.daocloud.io/docker | sh
yam安装
yum install -y docker
启动守护进程服务
service docker start
Docker命令(基础常用命令)
-d :分离模式: 在后台运行
-i :即使没有附加也保持STDIN 打开
-t :分配一个伪终端
查看镜像 (命令 image)
docker images
或者
docker image ls
查看容器
docker ps
查看全部容器(包括已停止的)使用 -a
docker ps -a
可以配合grep筛选显示
例:docker ps -a | grep nginx
images同理
运行容器
run
启动容器
start
停止容器
stop
删除容器
rm
删除镜像
rmi
杀死容器
kill
重启容器
restart
获取容器日志
logs
获取镜像
pull
推送镜像
push
镜像打标记(相当于重命名)
tag
docker run -d --name 自定义容器名 镜像名
docker start 容器名或容器id
docker stop 容器名或容器id
docker rm 容器名或容器id
docker kill 容器名或容器id
ps:删除需要配合 -f (通过SIGKILL信号强制删除一个运行中的容器)使用
进入运行中的容器
docker exec -it 容器名或id /bin/sh (ps:/bin/sh为使用sh方式。也可使用bash方式)
退出 直接输入exit即可
Docker命令(比较特殊的命令)
镜像导出
save
命令
docker save [options] images [images…]
示例
docker save -o nginx.tar nginx:latest
或
docker save > nginx.tar nginx:latest
其中-o和>表示输出到文件,nginx.tar为目标文件,nginx:latest是源镜像名(name:tag)
镜像导入
load
命令
docker load [options]
示例
docker load -i nginx.tar
或
docker load < nginx.tar
其中-i和<表示从文件输入。会成功导入镜像及相关元数据,包括tag信息
容器导入导出
export
命令
docker export [options] container
示例
docker export -o nginx-test.tar nginx-test
其中-o表示输出到文件,nginx-test.tar为目标文件,nginx-test是源容器名(name)
import
命令
docker import [options] file|URL|- [REPOSITORY[:TAG]]
示例
docker import nginx-test.tar nginx:imp
或
cat nginx-test.tar | docker import - nginx:imp
save / load 与 export / import 的区别
export命令是从容器(container)中导出tar文件,而save命令则是从镜像(images)中导出
基于第二点,export导出的文件再import回去时,无法保留镜像所有历史,不能进行回滚操作;而save是依据镜像来的,所以导入时可以完整保留下每一层layer信息。
建议
可以依据具体使用场景来选择命令
若是只想备份images,使用save、load即可
若是在启动容器后,容器内容有变化,需要备份,则使用export、import
镜像打包
build
需要写好Dockerfile文件
docker build -t 自定义镜像名 .
pssss:最后的点( . )不能少
指定Dockerfile文件路径的打包方式
docker build -t 自定义镜像名 -f Dockerfile文件路径 .
psssssss:最后的点( . )不能少
Dockerfile文件
#制定node镜像的版本
FROM node:8.9-alpine
#声明作者
MAINTAINER robin
#移动当前目录下面的文件到app目录下
ADD . /app/
#进入到app目录下面,类似cd
WORKDIR /app
#安装依赖
RUN npm install
#对外暴露的端口
EXPOSE 3000
#程序启动脚本,只有最后一个会生效,可被替代
CMD ["npm", "start"]
#指定这个容器启动的时候要运行的命令,可以**追加**命令
ENTRYPOINT
#挂载的目录
VOLUME
#当构建一个被继承 DockerFile这个时候就会运行OBUILD的指令。
ONBUILD
#类似ADD,将我们的文件拷贝到镜像中
COPY . /app/
#构建的时候设置环境变量
ENV JAVA_HOME /usr/local/jdk1.8 #配置jdk环境变量
CMD和ENTRYPOINT的区别
CMD只有最后一个命令会生效,会替换之前的命令
ENTRYPOINT命令会追加
特殊环境
在docker容器中访问宿主机端口
http://host.docker.internal
使用host网络-共用宿主机网络端口(不需要端口映射)
docker run -d --name nginx --network host nginx
或者
docker run -d --name nginx --net=host nginx
docker开启远程配置
1.修改doker服务文件
vi /lib/systemd/system/docker.service
2.注释掉原来的ExecStart开头的那一行
3.修改ExecStart那一行为:
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
4.重启
systemctl daemon-reload
systemctl restart docker.service
部分远程操作-参考:
docker -H tcp://xxx.xxx.xxx.xxx:2375 rm -f webhis-dev
docker -H tcp://xxx.xxx.xxx.xxx:2375 rmi webhis-dev
docker -H tcp://xxx.xxx.xxx.xxx:2375 build -t webhis-dev . && docker -H tcp://xxx.xxx.xxx.xxx:2375 run -d -p 8090:80 --name webhis-dev -v /u01/webhis-dev/config.js:/usr/share/nginx/html/config.js
查看私有仓库执行此命令:
curl -XGET http://ip:端口/v2/_catalog
获取某个镜像的标签列表:
curl -XGEThttp://192.168.1.8:5000/v2/私有仓库镜像名称/tags/list
内存限额
与操作系统类似,容器可使用的内存包括两部分:物理内存和 swap。 Docker 通过下面两组参数来控制容器内存的使用量。
-m 或 --memory:设置内存的使用限额,例如 100M, 2G。
–memory-swap:设置 内存+swap 的使用限额。
当我们执行如下命令:
docker run -m 200M --memory-swap=300M ubuntu
其含义是允许该容器最多使用 200M 的内存和 100M 的 swap。默认情况下,上面两组参数为 -1,即对容器内存和 swap 的使用没有限制。
下面我们将使用 progrium/stress 镜像来学习如何为容器分配内存。该镜像可用于对容器执行压力测试。执行如下命令:
docker run -it -m 200M --memory-swap=300M progrium/stress --vm 1 --vm-bytes 280M
–vm 1:启动 1 个内存工作线程。
–vm-bytes 280M:每个线程分配 280M 内存。
因为 280M 在可分配的范围(300M)内,所以工作线程能够正常工作,其过程是
分配 280M 内存。
释放 280M 内存。
再分配 280M 内存。
再释放 280M 内存。
一直循环…
如果让工作线程分配的内存超过 300M。
分配的内存超过限额,stress 线程报错,容器退出。
如果在启动容器时只指定 -m 而不指定 --memory-swap,那么 --memory-swap 默认为 -m 的两倍,比如:
docker run -it -m 200M ubuntu
容器最多使用 200M 物理内存和 200M swap。