Docker常用操作指令
1.镜像-Images
①拉取镜像
docker pull image-name:tag //如果不指定tag则默认拉取的是最新的镜像
②查看docker中已拉取的镜像
docker images
③推送镜像到私有仓库
//无论是推送镜像到私有仓库还是拉取,都需要先进行登录,以阿里云镜像仓库为例,输入密码即可
docker login --username=[阿里云账户全名] registry.cn-shanghai.aliyuncs.com
//使用命令将需要推送的镜像进行重命名
docker tag [image-id] registry.cn-shanghai.aliyuncs.com/[个人镜像名称]:[镜像版本号]
//推送修改好名称的镜像到远程
docker push registry.cn-shanghai.aliyuncs.com/[个人镜像名称]:[镜像版本号]
④删除镜像
docker rmi images-id||image-name
2.容器-Container
①创建容器
docker create images-name
②运行容器
//-d 后台运行
//--link 链接到另一个容器
//-p 映射端口到主机
//-v 挂载主机目录到容器
//-e 设置环境变量
//--restart=always 开启自动启动
docker run -d --name ${project-name} --link mysql:mysql -p 9090:9090 -v /home/service/guns:/guns -e "spring.profiles.active=dev" --restart=always ${project-name}:$BUILD_NUMBER
③停止容器
docker stop container-name
④重启容器
docker restart container-name
docker start container-name
⑤移除容器
docker rm container-name
⑥查看容器或者镜像的详细信息
docker inspect container-name||image-name
⑦进入某个运行中的容器
docker exec -it container-name bash
3.日志
①查看启动打印的日志
docker logs -tail -f 100 container-name
4.文件复制
①从主机复制到容器
docker cp /home/file.txt container-name:/file.txt
//从容器复制到主机相反即可
5.进阶脚本
#!/bin/sh
BUILD_COMMAND="yarn install --registry https://registry.npm.taobao.org; yarn build;"
# 执行脚本时后面传入的第一个参数
CI_COMMIT_REF_SLUG="$1"
# 编译打包项目
docker run -v $(pwd)/:/app -w /app node:10 /bin/sh -c "$BUILD_COMMAND" || exit 1
# 将项目打包到docker镜像,镜像名称带上CI_COMMIT_REF_SLUG
# 运行此命令需要项目根路径有Dockerfile文件,文件比较简单,这里就不列出了
docker build -t game-frontend:$CI_COMMIT_REF_SLUG .
# 判断是否有当前分支对应的容器在运行
if [ ! "$(docker ps -q -f name=$CI_COMMIT_REF_SLUG)" ];
then
# 如果有容器但已退出
if [ "$(docker ps -aq -f status=exited -f name=$CI_COMMIT_REF_SLUG)" ];
then
# 删除容器
docker rm $CI_COMMIT_REF_SLUG
fi
# 利用刚刚构建的镜像启动一个名为CI_COMMIT_REF_SLUG的容器
docker run --name $CI_COMMIT_REF_SLUG -P -d game-frontend:$CI_COMMIT_REF_SLUG
# 获取容器端口号,输出出来,方便查看
HOSTPORT=$(docker inspect --format='{{(index (index .NetworkSettings.Ports "3000/tcp") 0).HostPort}}' $CI_COMMIT_REF_SLUG)
echo "端口号:$HOSTPORT"
else
# 如果已有容器,则获取端口号
HOSTPORT=$(docker inspect --format='{{(index (index .NetworkSettings.Ports "3000/tcp") 0).HostPort}}' $CI_COMMIT_REF_SLUG)
echo "端口号:$HOSTPORT"
# 停止容器,并删除
docker stop $CI_COMMIT_REF_SLUG
docker rm $CI_COMMIT_REF_SLUG
# 根据之前端口号启动新的容器
docker run --name $CI_COMMIT_REF_SLUG -p $HOSTPORT:3000 -d game-frontend:$CI_COMMIT_REF_SLUG
fi
lastest:问题集锦
①:问题描述:"Host '172.17.0.3' is not allowed to connect to this MySQL server"
原因是当前连接mysql的用户,比如root默认是只能在localhost使用,在其他主机连接该容器的mysql使用root则会报上面的错误。解决方案如下:
1).修改root的可使用地址为local和172.17.0.3
2).新建账号,各个ip地址都可用