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


posted @ 2025-07-07 10:33  rcoder  阅读(14)  评论(0)    收藏  举报