最近项目用到docker,将用到的命令和问题汇总
镜像和容器的关系和类和对象的关系类似,镜像是类,容器是类构建的对象。
在Docker中,images为镜像
所以
docker ps -a //列出所有docker容器,包括不同状态的容器(活动与不活动)
docker ps //只列出活动的docker容器
docker images //列出所有镜像
docker stop 容器ID
docker rm 容器ID //删除容器(需要将活动容器stop掉)
docker rmi 镜像ID //删除镜像(需要将基于镜像创建的容器rm掉)
容器可以打包生成镜像
生成镜像的方法:
- Dockerfile
FROM 基类镜像
WORKDIR /home //设置工作目录为home
ADD /app /home //将Dockerfile所在文件夹的app目录文件复制到镜像中home,两路径中间有空格
RUN xxx //在构建镜像中运行命令,一般用来安装依赖,软件
&&xxx
EXPOSE 80 //或者22,使端口对外部可用
ENV NAME xxx //定义环境变量
CMD["wine","xxx.exe"] //命令可以是bash,python...
最后使用docker build -t app:v1 .
构建镜像,注意末尾的点,app:v1为镜像名和版本号
- 使用Docker commit命令
如果已经有调试好的容器,可以用容器生成镜像,方便移植到其他地方使用。
docker commit 容器ID app:v1 //从容器生成app:v1的镜像名称和标签
docker save -o app.tar app:v1 //将app:v1的镜像保存成app.tar文件
使用tar文件:将tar文件复制到其他系统中
docker load -i app.tar //加载镜像并验证
期间涉及到SCP命令拷贝文件
scp 用户名@IP地址:/home/文件名 ./ //从远程拷贝文件到本地
scp 文件名 用户名@IP地址:/home //拷贝本地文件到远程
ssh 用户名@IP地址 //登录远程
如果拷贝tar包出现Permission deny,需要chmod 777 app.tar
镜像构建容器
使用docker run命令从镜像构建容器
docker run -itd --restart=always --network=host --name appName -v /home:/home app:v1
-itd指后台守护进程运行,–restart=always自动重启,–network=host指创建的容器使用宿主机的网络,-v /home:/home指挂载目录,将宿主机的home目录挂载到容器中的home目录,最后app:v1指镜像及版本号。
有时候需要将自启动关掉,可以使用
docker update --restart=no 容器ID