Docker基础命令
PS: 在以下命令中要注意下面5个名字代表的含义
1. imageId: 镜像ID
2. imageName: 镜像名字
3. containerId: 容器ID
4. containerName: 容器名字
5. fileName: 文件名
-
安装docker
yum install docker
-
查看是否安装成功
docker info
# 或者
docker version
-
换源
vi /etc/docker/daemon.json
# 增加
{
"registry-mirrors": ["https://3zfwxe4j.mirror.aliyuncs.com"]
}
# 增加
{
"registry-mirrors": ["https://3zfwxe4j.mirror.aliyuncs.com"]
}
# 重启
systemctl restart docker
systemctl restart docker
-
登录dockerHub
docker login docker.io
- 查找镜像
docker search imageName(镜像名)
- 下载镜像
docker pull imageName(镜像名)
-
上传镜像
docker push docker.io/username/imageName(镜像名)
-
改镜像名
docker tag imageId(镜像id) docker.io/zhengquantao/imageName(新镜像名)
-
查看镜像
docker images
-
查看所有容器名
# 查看正在运行容器
docker ps
# 查看所有容器,包含停止的容器
docker ps -a
-
运行容器
# 运行进入容器
docker run -it zhengquantao/alipine:21.2.23 bash
# 运行容器,停止自动删除容器 --rm
docker run --rm --name mynginx -p:8001:80 -d zhengquantao/nginx:v1
# 运行容器,挂载文件 -v
docker run --rm --name mynginx_baidu -d -p 8003:80 -v D:/dockerImage:/usr/share/nginx/html zhengquantao/nginx:v1
# 运行容器,传入环境名 -e
docker run --rm --name mynginx_baidu -d -p 8003:80 -e IP="http://www.baidu.com" -v D:/dockerImage:/usr/share/nginx/html zhengquantao/nginx:v1
# 运行容器,关联多个容器 --link
docker run --name waterland -p 8003:8003 -p 8004:8004 -p 8188:8188 --link mysql:my-mysql -v /root/waterland-cms-bn:/app waterland:v1
-
进入正在运行的容器
docker exec -it containId /bin/bash
- 停止、开始、重启容器
docker stop/start/restart containerId(容器ip/名字)
- 提交容器成镜像
docker commit -p containId imageName(新名字)
-
删除容器
docker rm -f containerId
- 删除镜像
docker rmi imageId
- 查看日志
docker logs -f containerId
- 重定向输入日志
docker run containerId(名字) 2>&1 >> /dev/null
- 复制文件到指定容器
docker cp waterland.sql containerId:/waterland.sql
- MySQL导出数据
docker exec some-mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /some/path/on/your/host/all-databases.sql
- MySQL导入数据
docker exec -i some-mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /some/path/on/your/host/all-databases.sql
- 导出镜像
docker save -o fileName.tar imageId
- 导入镜像
docker load < fileName.tar
- 导出容器
docker export fileName.tar containerId
- 导入容器
docker import fileName.tar containerName
- 构建
docker build -t zhengquantao/imageName .
- Dockerfile
FROM zhengquantao/python-nginx:3.8 # 创建工作路径 RUN mkdir /app COPY . /app # 指定容器启动时执行的命令都在app目录下执行 WORKDIR /app # 替换nginx的配置 COPY nginx.conf /etc/nginx/nginx.conf # 添加证书文件 # COPY cert /etc/nginx/cert # 升级pip RUN pip3 install --upgrade pip -i https://mirrors.aliyun.com/pypi/simple # pip读取requirements.txt内容安装所需的库 RUN pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple # PORT #EXPOSE 8000 #EXPOSE 8001 #EXPOSE 8135 #EXPOSE 8134 # 启动nginx和uwsgi,这里一定要加上-g,主要目的就是设置pid=1。因为docker 容器默认会把容器内部第一个进程,也就是pid=1的程序作为docker容器是否正在运行的依据,如果pid=1的程序挂了,那容器就挂了。 #ENTRYPOINT ["nginx"] CMD bash /app/env.sh ENTRYPOINT nginx -g "daemon off;" && uwsgi -i uwsgi.ini
- docker-compose.yml
version: '3' services: mysql: build: ./mysql ports: - "3306:3306" environment: - MYSQL_ROOT_PASSWORD=123456 restart: always flask: build: ./flask ports: - "5000:5000" volumes: - ":" links: - mysql:mysql restart: always
- env.sh
#!/usr/bin/env sh find '/app/admin/dist/js' -name '*.js' -exec sed -i -e 's/baseURL=".*"/baseURL="$IP"/g' {} ; find '/app/client/dist/js' -name '*.js' -exec sed -i -e 's/baseURL=".*"/baseURL="$IP"/g' {} ;
Docker高级操作
- -e 环境变量
docker技术之所以这么流行 比其他容器技术更加受欢迎 很大一部分原因是 可以在运行时传入环境变量 -e ,通过这个传入环境变量用户可以在不改变任何代码的情况下 可以配置程序, 真正实现一套代码多端运行。举个列子,一个前后端分离的项目。前端vue.js,后端 goland等其他语言。当这个项目在这个服务器上运行没有问题,当你需要迁移到其他服务器时,前端就要更改请求IP重新打包。这样就变得异常繁琐。这时候你通过-e 转入请求IP 就避免了重新打包。可以-e 使你的程序更加灵活。
- -v 挂载数据
绑定本地数据到docker容器之中,本地数据变化 相应的docker中数据也跟着变化。一般用于本地开发