docker学习笔记
镜像常用命令
# 显示所有镜像。等价于 docker image ls
docker images
# 删除镜像
docker image rm <image id></image>
# 删除为none的空镜像
docker rmi $(docker images -f "dangling=true" -q)
# 执行镜像,执行后立即退出
docker run <image name>
# 执行镜像,交互式
docker run -it <image name>
# 执行镜像,-p 指定本机端口和docker中应用的端口映射,-d 表示后台运行,--name 表示给容器分配一个名字, -e 设置容器环境变量。
docker run -p 3000:3000 -d -e MODE=test --name=express-demo <image name>
# docker副本创建
docker tag <image name> <new image name>
# 查看镜像的层结构
docker history <image id>
# exit 退出交互式命令行
exit
容器常用命名
# 显示所有container(运行中的和退出的), -a 表示所有容器。等价于 docker ps -a
docker container ls -a
# 清除所有的container,-q 参数表示只列出id
docker rm $(docker container ls -aq)
# 清除所有已经推出的container,-f 指定条件
docker rm $(docker container ls -f "status=exited" -q)
# 查看容器的详细信息
docker inspect <container id>
# 显示容器输出日志
docker logs <container id>
# 进入容器
docker exec -it <container id> /bin/bash
# 显示容器的ip地址
docker exec -it <container id> ip a
# 停止容器
docker stop <container id | container name>
基于Dockerfile构建镜像
# 创建Dockeerfile文件,内容如下
FROM ubuntu:18.04
RUN apt-get update && apt-get install -y vim
# 构建镜像(要在dockerfile所在目录执行该命令), -t 表示标签名
docker build -t wmui/ubuntu002 .
基于commmit构建镜像
# 在容器中完成软件的安装
# 使用 docker container ls -a 查看第一个 container id(第一个就是最近操作的一个)
# 使用命令构建镜像
docker commit <container id> <new image name> # docker commit 892ee8df74e2 wmui/ubuntu001
发布镜像到dockerhub
# 登录dockerhub
docker login
# 发布image(image的前缀名要和dockerhub账号一致)
docker push 1308017/hello latest
# 私有仓库
说明:关于私有仓库的搭建可以产考这里,必须在局域网才行。
打包命令行镜像
FROM ubuntu
RUN apt-get update && apt-get install -y stress
ENTRYPOINT ["/usr/bin/stress"]
CMD []
说明:stress 可以分配docker的内存
容器之间的通信
# 安装软件
sudo apt install bridge-utils
# 查看网络链接情况
brctl show
# 查看容器的网络链接情况
docker network inspect bridge
# 查看所有网桥
docker network ls
说明:基于同一个镜像创建的容器,他们的网络默认是和bridge0绑定的,因此他们之间是可以互相通信的
基于自定义bridge关联容器
# 创建一个新的bridge
docker network create -d bridge express-demo-bridge
# 基于新bridge创建容器
docker run -d --name=express-demo3 --network=express-demo-bridge 1308017/express-demo
# 修改旧容器的关联bridge
docker network connect express-demo-bridge express-demo
说明:使用自定义bridge,容器之间可以通过容器名字ping通,因此可以使用容器名字代替ip。
数据持久化
docker run -d -p 3000:3000 -v $(pwd):/usr/src/express-demo --name=express-demo wmui/express-demo
特别说明:要在项目目录下执行该命令,这样pwd才能正确映射docker中的项目目录
docker安装wordpress
# pull image
docker pull wordpress mysql
# create container, docker volume ls 可以查看本机的volumn
docker run -d --name=mysql -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=wordpress mysql
docker run -d --name=wordpress -e WORDPRESS_DB_HOST=mysql:3306 --link mysql -p 3000:80 wordpress
# 访问 ip:3000 开始安装
docker-compose安装
# install
sudo curl -L "https://github.com.cnpmjs.org/docker/compose/releases/download/1.28.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# debug docker-compose
docker-compose up
# 启动服务
docker-compose up -d # or docker-compose start
# 停止服务
docker-compose stop
# 删除服务
docker-compose down # 不会删除镜像
# 进入容器
docker-compose exec wordpress bash
胖胖熊笔记,笔记已迁移