参考文档:柏码知识库 | Docker 容器技术 笔记

换源

vim /etc/docker/daemon.json

{
    "registry-mirrors": [
        "https://docker.xuanyuan.me",
        "https://docker.registry.cyou",
        "https://docker-cf.registry.cyou",
        "https://dockercf.jsdelivr.fyi",
        "https://docker.jsdelivr.fyi",
    	"https://docker.unsee.tech",
        "https://dockerpull.org",
        "docker.1panel.live",
        "https://dockerhub.icu"
    ]
}

hello world

docker pull hello-world
docker images
docker run hello-world

常用命令

docker pull <镜像名称>:<版本> 拉取镜像

docker images 查看所有镜像

docker run <镜像名称> 运行镜像(一个镜像可以创建多个容器)

docker ps -a 查看运行中的容器(-a是查看所有容器)

docker run --name=<容器名称> 设置容器名称

docker start <容器名称/Id> 开启停止的容器

docker stop <容器名称/Id> 停止容器

docker restart <容器名称/Id> 重启容器

docker rm <容器名称/Id> 删除停止的容器

docker run --rm <镜像名称> 停止容器立即删除容器

docker rmi <镜像名称> 删除镜像(前提是没有正在使用镜像运行的容器

docker run -it centos 注意这里需要添加-it参数进行启动,其中-i表示在容器上打开一个标准的输入接口,-t表示分配一个伪tty设备,可以支持终端登录,一般这两个是一起使用,否则base容器启动后就自动停止了。

docker run -p 8080:8080 端口映射(宿主机端口:docker内部端口)

docker commit <容器名称/ID> <新的镜像名称>

docker build -t <name>:<tag> . 使用当前路径下的 dockerfile 创建镜像

docker hub 推送

docker tag ubuntu-java-file:latest <username>/ubuntu-java:1.0

docker login -u <username>

docker push <username>/ubuntu-java:1.0 `

镜像结构

使用宿主机内核的 bootfs,使用镜像的 rootfs

在一个 docker 容器中,可能有很多镜像,层层叠加,最上层是一个可写容器层,整体抽象为一个数据层。

对于文件读取,从最上层往下一次寻找该文件;文件创建修改直接创建或修改在可写容器层;文件删除是从最上层往下一次寻找该文件并标记为删除。

dockerfile

启动一个 springboot 项目:

  1. 使用 maven 打包为 jar 包(如果提示“没有主清单属性”则把pom.xml中plugin>org.springframework.boot的skip改为false)
  2. 编写 dockerfile
FROM tanphoon/ubuntu-java:1.0  
COPY target/DockerTest-0.0.1-SNAPSHOT.jar app.jar  
CMD java -jar app.jar
  1. 使用 dockerfile 生成镜像 docker build springboot-test:1.0 .
  2. 创建容器并运行:docker run -p 8080:8080 springboot-test:1.0

docker 网络

  1. none 单机网络
  2. bright 桥接网络
  3. host 共享网络

在创建容器时,使用 --network= 指定网络。