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
原文地址:https://www.cnblogs.com/yesyes/p/15375422.html