安装

sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
sudo docker run hello-world

安装Docker Compose

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version

使用Dockerfile创建镜像

docker build -t getting-started .

运行镜像

# --name postgres, 如果没有使用--name,那么docker会自动分配一个随机的name,类似于naughty_lumiere
sudo docker run -dp 3000:3000 getting-started
sudo docker run -d -p 80:80 docker/getting-started
sudo docker exec 0f1c27d07ceb

查看运行实例的ID

sudo docker ps -a

停止

sudo docker stop 6f23e14b3bcb

停止并删除

sudo docker rm -f 4284e18a2957
!删除所有已经停止的容器
sudo docker rm $(sudo docker ps -a -q)

查看镜像

sudo docker image ls
sudo docker images

给镜像取其它名称

一个镜像可以有很多个Tag名称,但是Image ID是相同的,必须删除同一个ImageID下的所有的Tag名称,才会删除这个镜像

sudo docker tag getting-started zwj12/getting-started

docker镜像命名规范

给镜像打标签(tag)时需要注意命名的规范,一般为:系统名称+系统版本+服务名+服务版本:代码版本。镜像的名称需要限制为[a-z0-9],其中可以出现的符号为[-._]

centos7.6-nginx-1.47:2.0

数据持久化

sudo docker volume create todo-db
sudo docker run -dp 3000:3000 -v todo-db:/etc/todos getting-started
sudo docker volume inspect todo-db
sudo docker volume ls

数据持久化数据存储位置

/var/lib/docker/volumes

宿主机上的目录挂载到镜像里

# 通过-v参数,冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径。
sudo docker run -dp 3000:3000 -w /app -v "$(pwd):/app" node:12-alpine sh -c "yarn install && yarn run dev"
sudo docker logs -f 2d6a662b1a34
docker build -t getting-started .

日志文件夹

查看绑定端口信息

sudo docker port 24e1a7af4ae1
sudo docker inspect 24e1a7af4ae1

登录dockerhub账号

sudo docker login -u zwj12

容器网络, 172.17.0.1

sudo docker network create todo-app
sudo docker run -d --network todo-app --network-alias mysql -v todo-mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=secret -e MYSQL_DATABASE=todos mysql:5.7
sudo docker run -it --network todo-app nicolaka/netshoot
dig mysql

在运行的容器中执行命令

docker exec -it 787aab68427b mysql -u root -p

获取容器的日志

sudo docker logs 0b6fab7f6e24

dig命令

dig qq.com

Docker Compose

sudo docker-compose up -d
sudo docker-compose logs -f
sudo docker-compose logs -f app
sudo docker-compose down
sudo docker-compose down --volumes

扫描Bug

sudo docker scan getting-started

镜像历史

sudo docker image history getting-started
sudo docker image history --no-trunc getting-started