docker

Docker是一个开放源代码的开放平台软件,用于开发应用、交付(shipping)应用和运行应用。Docker允许用户将基础设施(Infrastructure)中的应用单独分割出来,形成更小的颗粒(容器),从而提高交付软件的速度。

Install


For Ubuntu
1
2
# 就这一个命令就可以了
sudo apt install docker.io

首先清除原有的docker

1
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

更新库

1
2
3
4
5
6
7
8
9
10
11
12
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

安装docker

1
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

运行示例程序

1
sudo docker run hello-world

For CentOS

首先清除原有的docker

1
2
3
4
5
6
7
8
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

更新库

1
2
3
4
5
sudo yum install -y yum-utils
# 官方
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 阿里云
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装docker

1
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

运行docker

1
sudo systemctl start docker

开机自启动docker

1
sudo systemctl enable docker

配置加速

1
2
3
4
5
6
7
8
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<- 'EOF'
{
"registry-mirrors":["https://mirror.ccs.tencentyun.com"]
}
'EOF'
sudo systemctl daemon-reload
sudo systemctl restart docker

卸载docker

1
2
3
4
sudo yum remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras

sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd

Docker 容器

Docker Hub 官网

Docker 命令

查看

docker ps

查看运行的docker容器

docker ps -a

查看所有的docker容器

docker container inspect container_name/container_id

查看容器的信息,如网关

下载镜像

docker search mirror:tag
1
sudo docker search nginx
docker pull mirror:tag
1
2
# 默认lates
sudo docker pull nginx
docker images
1
sudo docker images
docker rmi mirror_name/mirror_id
1
sudo docker rmi e7

启动容器

docker run option mirror_name/mirror_id
1
sudo docker run -d --name my_container -p 80:80 -v /home/lnpbqc/html:/usr/share/nginx/html nginx

使用 -d 表示后台

使用 -p 表示使用端口映射,本机端口:容器端口

使用 –name 来设置容器名

使用 -v 来实现目录挂载 本主机目录 到 目的容器目录

docker exec option container_name/container_id environ
1
sudo docker exec -it my_container /bin/bash

使用 -it 表示以交互模式进入

以 bash 进行容器交互

docker rm option container_name/container_id
1
sudo docker rm 592

使用 -f 可以强制删除正在运行的容器

docker stop container_name/container_id
1
sudo docker stop 592
docker start container_name/container_id
1
sudo docker start 592
docker restart container_name/container_id
1
sudo docker restart 592
docker stats container_name/container_id
1
sudo docker stats 592
docker logs container_name/container_id
1
sudo docker logs 592

保存镜像

docker commit option container_name/container_id mirror:tag
1
sudo docker commit -a lnpbqc -m "message" -p true mynginx mynginx:latest

使用 -a 指定作者

使用 -m 添加信息

使用 -p 让提交时停止容器(默认为true)

docker save option mirror:tag
1
sudo docker save -o mynginx.tar mynginx:latest 

使用 -o 指定生成文件名

docker load option
1
sudo docker -i mynginx.tar

使用 -i 指定加载镜像文件

分享

docker login

首先要有dockerhub网站账号

1
2
sudo docker login
# 然后输入用户名和密码即可
docker tag sourcee_mirror:tag target_mirror:tag

因为dockerhub上的镜像名需要是用户名加原来镜像

1
sudo docker tag mynginx:latest lnpbqc/mynginx:latest
docker push mirror/mirror_id:tag
1
sudo docker push lnpbqc/mynginx:latest

存储

目录挂载可见前面的 docker run

::: info
通过目录挂载后,不管是修改外面目录还是容器内的目录都会相互影响的
:::

卷映射

不同于上面的目录挂载,因为上面那样挂载不会创建文件,只是会有一个这样的文件目录。
如果映射配置文件,在挂载的时候没有,则容器运行的时候会因为没有配置文件而退出。

1
sudo docker run -d -v ngconf:/etc/nginx --name mynginx nginx

这个的 -v 后面跟一个卷名 ngconf,它位于 /var/lib/docker/volumes/<卷名>

使用以下方式管理卷

1
2
3
4
5
6
7
8
# 查看
sudo docker volume ls

# 创建
sudo docker volume create 卷名

# 打印卷的信息
sudo docker volume inspect 卷名

网络

自定义网络
  • docker在创建容器的时候为每个容器分配一个ip,加入默认的网关 docker0 ,使用 容器ip+容器端口 即可互相访问
  • docker0 是网络 bridge

因为ip可能会变化,因为需要创建自定义网络,而容器名就是稳定的域名

1
2
3
4
5
# 创建网络
sudo docker network create mynet

# 容器以指定网络创建
sudo docker run -d --name app1 --network mynet nginx

在容器内就可以以容器名对同一个网络下的另一容器访问

1
2
sudo docker exec -it app1 bash
curl http://app2:80