docker安装与使用
Install Docker Engine on Ubuntu | Docker Docs
安装
# 卸载老版本
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
# 1. Set up Docker's `apt` repository.
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
# 2. Install the Docker packages.
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 3. Verify that the Docker Engine installation is successful by running the `hello-world` image.
sudo docker run hello-world
# 4. 将用户添加到docker组,方便执行docker命令
sudo adduser siven docker
# 5. Docker hub国内镜像设置
# vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://dockerproxy.com",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://ccr.ccs.tencentyun.com"
]
}
镜像管理
使用
# docker 配置信息
docker info
# 摘取镜像
docker pull nginx:1.19
# 查看本地镜像
docker images
# 删除镜像
docker image rm nginx
# 或者简写
docker rmi nginx
# 运行镜像
# -d 后台运行daemon,-p 端口映射容器80映射到宿主8080
docker run -d -p 8080:80 nginx:1.19
# docker查看进程
docker ps
siven@siven:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
19c9aa195c8b nginx:1.19 "/docker-entrypoint.…" 31 seconds ago Up 12 seconds 0.0.0.0:8080->80/tcp, :::8080->80/tcp serene_wing
# 进入容器shell
docker exec -it 19c9aa195c8b bash
构建镜像
mkdir myweb
cd myweb
vim dockerfile
#from nginx
#COPY index.html /usr/share/nginx/html/index.html
docker build myweb:v1 .
docker run -d -p8081:80 myweb:v1
修改镜像
# 修改容器
docker ps
docker exec -it 0141b bash
echo 'hello docker!!' > /usr/share/nignx/html/index.html
exit
# 保存到新的镜像
docker commit 0141b myweb:v2
# 查看镜像
docker images
# 运行新镜像
docker run -d -p8082:80 myweb:v2
停止容器 并删除镜像
# 停止容器
docker stop 0141b
# 删除容器
docker rm 0141b
# 删除镜像
docker rmi myweb:v2
查看镜像构建历史
# 镜像构建历史
docker history myweb:v2
# 镜像更详细信息
docker inspect myweb:v2
容器管理
# 查看容器进行
# -a 查看所有容器,包括已经停止的容器
docker ps
docker ps -a
# 停止容器 指定容器ID的唯一值即可
docker stop 9f
# 删除容器
docker rm 9f
# 删除镜像
docker rmi myweb:v2
# 启动容器 start | restart
docker start 9f
# 暂停容器进程,不再耗费资源
docker pause 9f
# 取消暂停进程
docker unpause 9f
# 强制杀掉容器进程
docker kill 9f
# 查看容器状态
docker stats 9f
# 查看容器详情
docker inspect 容器名/容器id
# 查看容器日志
# --tail 查看最后10行
# -f 滚动查看 flow
docker logs 9f
docker logs --tail 10 9f
docker logs --tail 10 -f 9f
# 宿主与容器间拷贝文件
docker cp index.html 9f://usr/share/nginx/html
# 进入容器
docker exec -it f5 bash
Docker网络管理
# bridge
docker run --name web1 --net bridge -d myweb:v1
# host
docker run --name web2 --net host -d myweb:v1
# portMap
# 宿主机的8080端口映射到容器的80端口
docker run --name web3 -p 8080:80 -d myweb:v1
# none
# 不具备任何的网络属性,比较安全
docker run --name web4 --net none -d myweb:v1
# 查看网络类型
docker network ls
root@siven:~# docker network ls
NETWORK ID NAME DRIVER SCOPE
882ea3f311fb bridge bridge local
de8e936d7868 host host local
03e33d264085 none null local
# 手动创建自定义的网络类型
# 如果两个容器使用相同的自定义网络,可以直接通过容器name访问
docker network create --driver bridge mynet
docker run --name web5 --net mynet
# 查看docker日志
# 查看name为web4的容器的日志的最后4条
docker logs --tail 10 web4
docker 存储卷管理
# 方式一:通过volume的方式,创建文件的卷
# 查看volume
docker volume ls
# 创建volume
docker volume create html
# 查看volume详细信息
# 可以查看volume宿主级的路径
docker volume inspect html
# 使用volume
docker run -d --name myweb1 -v html:/usr/share/nginx/html -p 8080:80 nginx:1.19
# 修改卷文件内容
# 容器停止或删除后,卷里文件仍然保存
cd /usr/share/nginx/html
echo 'hello world' > index.html
# 方式二:hostPath,通过对宿主级的目录进行映射来管理文件
# 如果host目录不存在,会自动创建
docker run --name myweb2 -d -v /host/html:/usr/share/nginx/html -p 8081:80 nginx:1.19
# 总结
# volume与hostPath的区别
# 如果容器内有文件,volume会将容器内文件映射到宿主机,并持久存在。hostPath不会把容器内原有内容映射到宿主目录
docker compose
# 安装
## V1
## V1已停止更新,不再支持
apt install docker-compose
apt remove docker-compose
docker-compose -v
## V2
apt install docker-compose-plugin
docker compose -v
# 传统方式构建项目
# db
# dockerfile
from mysql
ENV MYSQL_ROOT_PASSWORD=123456
ENV MYSQL_DATABASE=fruits
# 构建镜像
docker build -t mydb:1.0 .
# 容器
docker run --name db1 --net mydog -d mydb:1.0
# web
# dockerfile
from nginx:1.19
label maintainer='siven@126.com'
copy html/ /usr/share/nginx/html/
copy static/images/ /usr/share/nginx/html/images
copy nginx.conf /etc/nginx/nginx.conf
# 构建镜像
docker build -t myweb:1.0 .
# 容器
docker run --name web1 --net mydog -d myweb:1.0
# compose方式
# docker-compose.yaml
version: "3.8"
services:
db:
image: mydb:1.0
container_name: db1
build:
context: "./db"
dockerfile: dockerfile
networks:
- mydog
web:
image: myweb:1.0
container_name: web1
build:
context: "./web"
dockerfile: dockerfile
ports:
- "80:80"
depends_on:
- db
networks:
- mydog
networks:
mydog:
driver: bridge
# 创建镜像
docker compose build
# 生成并运行容器
docker compose up -d
# 快速停止并删除容器
docker ps -q | xargs docker rm --force
# 常用命令
# 列出所有compose命令
docker compose
# 查看单独compose命令的帮助
docker compose 命令 --help
# 查看当前目录下compose配置
docker compose config
# 持续监听事件
docker compose events
# 创建容器
docker compose create
# 启动
docker compose start
# 创建并启动
docker compose up -d
# 进入容器
docker compose exec -it 服务名 bash
# 正在运行的服务
docker compose ps
# 当前compose用的镜像
docker compose images
# compose运行的所有项目列表
docker compose ls
浙公网安备 33010602011771号