docker基础命令学习笔记

Docker 文档地址

#docker 文档地址
https://docs.docker.com/

#docker 基本命令参考文档
https://docs.docker.com/engine/reference/commandline/

Docker 安装-ubuntu版本

删除原有版本
sudo apt-get remove docker docker-engine docker.io containerd runc
安装需要的安装包
sudo apt-get install 
    apt-transport-https 
    ca-certificates 
    curl 
    gnupg-agent 
    software-properties-common
设置镜像的仓库(使用阿里云仓库)
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
更新包索引
sudo apt-get update
安装 docker-ce 社区版本 ee-企业版本
sudo apt-get install docker-ce docker-ce-cli containerd.io
验证 hello-world
#运行容器,如果找不到镜像,会从镜像仓库瞎子
sudo docker run hello-world

#查看镜像
sudo docker images

EPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    bf756fb1ae65   11 months ago   13.3kB
卸载docker

卸载依赖

sudo apt-get purge docker-ce docker-ce-cli containerd.io

删除目录

sudo rm -rf /var/lib/docker

Docker 安装 - Centos 版本

删除原有版本
sudo yum remove docker 
                  docker-client 
                  docker-client-latest 
                  docker-common 
                  docker-latest 
                  docker-latest-logrotate 
                  docker-logrotate 
                  docker-enginesudo apt-get remove docker docker-engine docker.io containerd runc
安装需要的安装包
sudo yum install -y yum-utils
设置镜像的仓库(使用阿里云仓库)
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新包索引
sudo yum makecache fast
安装 docker-ce 社区版本 ee-企业版本
 sudo yum install docker-ce docker-ce-cli containerd.io
启动docker
 sudo systemctl start docker
验证 hello-world
sudo docker run hello-world
查看docker镜像
sudo docker images

EPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    bf756fb1ae65   11 months ago   13.3kB
卸载docker

卸载依赖

 sudo yum remove docker-ce docker-ce-cli containerd.io

删除目录

sudo rm -rf /var/lib/docker

Docker 镜像加速

Centos 加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"] # 详细地址登录阿里云查看
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
Ubuntu 加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"] # 详细地址登录阿里云查看
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

Docker 常用命令

docker 基本命令总览

image-20210103204736719

帮助命令
docker version
docker info
docker 命令 --help

镜像命令

查看镜像
docker images #查看镜像
REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    bf756fb1ae65   11 months ago   13.3kB

REPOSITORY 镜像的仓库源
TAG	镜像的标签
IMAGE ID 镜像的ID
CREATED 镜像的创建时间
SIZE	镜像的大小

参数
-a 显示所有镜像
-q 只显示ID

# 详细文档地址
# https://docs.docker.com/engine/reference/commandline/images/

下载镜像
docker pull  # 下载镜像
docker pull mysql:5.7 执行下载版本

#详细文档地址
# https://docs.docker.com/engine/reference/commandline/pull/
删除镜像
docker rmi -f 镜像ID1 镜像ID2 镜像IDn # 删除指定的镜像
sudo docker rmi -f $(sudo docker images -aq ) #删除所有

#详细文档地址
# https://docs.docker.com/engine/reference/commandline/rmi/
构建镜像
sudo docker build -f dockerfile_name -t name:[tag]

#详细文档地址
#https://docs.docker.com/engine/reference/commandline/build/
搜索镜像
# docker 搜索命令
sudo docker search 镜像名称

#详细文档地址
# https://docs.docker.com/engine/reference/commandline/search/

容器命令

新建容器并启动
sudo docker run [参数] image

#参数说明
--name="name" 容器名字 用来区分容器
-d 后台运行方式
-it 使用交互方式,进入容器查看内容
-p 	指定容器的端口号
	[主机ip]:[主机端口]:[容器端口]
	[主机端口]:[容器端口]
	[容器端口]
-P 随机指定端口
-d 后台启动
-v 数据卷挂载
-e 环境配置 (例如:配置mysql的密码)

# 测试并进入容器
sudo docker run -it centos /bin/bash

#详细文档地址
# https://docs.docker.com/engine/reference/commandline/run/


数据卷
#关于数据卷的解释: 数据卷就是文件夹的数据共享,多个容器可以挂载同一个目录共享数据,或者容器和主机宿主共享数据
#数据卷的例子
#测试 制定路径挂载
#sudo docker run -it -v 主机目录:容器内目录 -p 主机端口:容器端口 
sudo docker run -it -v /home/ceshi:/home/ceshi centos /bin/bash
# 查看所有的卷的情况
sudo docker volume ls
DRIVER    VOLUME NAME
local     juming-nginx


#匿名挂载:
-v /etc/nginx # 只填写容器内路径
sudo docker run -d -P --name nginx01 -v /etc/nginx nginx  #例子匿名挂载

#具名挂载: 
-v /etc/nginx:/etc/nginx #卷名:容器内路径
sudo docker run -d -P --name nginx04 -v juming:/etc/nginx nginx  #例子具名挂载

#制定具体路径挂在
-v 主机路径:容器内路径
sudo docker run -d -p 3301:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name=mysql01 mysql:5.7

#改变读写权限
-v juming:/etc/nginx:ro
-v juming:/etc/nginx:rw
ro  # read only  路径内容只能通过宿主机来操作
rw  # read write 改变读写权限


# 查看具体的卷的信息
$ sudo docker volume inspect juming-nginx
[
    {
        "CreatedAt": "2020-12-27T21:09:20+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data",
        "Name": "juming-nginx",
        "Options": null,
        "Scope": "local"
    }
]

所有的 匿名和具名的卷都在: /var/lib/docker/volumes 下


列出所有运行中的docker
docker ps # 列出所有正在运行的docker
-a 			#列出所有容器 运行中的容器 + 历史运行过的容器
-n=?		# 显示最近创建的n个人容器
-q			# 只显示容器的编号

#详细文档地址
# https://docs.docker.com/engine/reference/commandline/ps/
退出容器
exit #停止并退出
Ctrl + P + Q  # 不停止退出
删除容器
sudo docker rm 容器id  # 删除指定的未运行的容器 
sudo docker rm -f 容器id # 强制上出制定容器
sudo docker rm -f $(docker ps -aq) # 删除所有

#详细文档地址
# https://docs.docker.com/engine/reference/commandline/rm/
启动和停止操作
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止容器
docker kill 容器id #杀死容器进程
进入容器
# 进入一个容器,首先这个容器必须是启动的
sudo docker exec -it 容器id /bin/bash

#进入正在执行的终端
sudo docker attach 容器id 

#例子
docker exec -it af8e69c9c428 /bin/bash 

#详细文档地址
# https://docs.docker.com/engine/reference/commandline/exec/
查看日志
# docker 查看容器日志
sudo docker logs 

#例子, 运行一个容器,执行无线循环,并查看日志
sudo docker run --name test -d centos sh -c "while true; do $(echo date); sleep 1; done"
sudo docker logs -f -t --tail 10 6f47321012d8

-f 跟踪日志输出 
-t 显示时间戳
--tail 10  #显示10条记录

#日志
# https://docs.docker.com/engine/reference/commandline/logs/
查看容运行容器信息
docker ps 容器id

#详细文档地址
# https://docs.docker.com/engine/reference/commandline/ps/
查看镜像的元数据
sudo docker inspect 容器id

#详细文档地址
#https://docs.docker.com/engine/reference/commandline/inspect/
从文件中拷贝文件到主机
sudo docker cp 容器id:容器内路径 目标主机路径

#详细文档地址
# https://docs.docker.com/engine/reference/commandline/cp/
查看docker cup状态
sudo docker stats 容器id #查看docker 耗费资源情况 ,容器id为可选项

# 详细文档地址
# https://docs.docker.com/engine/reference/commandline/stats/

commit 镜像
docker commit 提交容器成为一个新的镜像

#命令和git的原理相似
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]

# 详细文档地址
# https://docs.docker.com/engine/reference/commandline/commit/

Dockerfile

编写 dockerfile 的基本指令
FROM		#基础镜像,从一个最基础的镜像构建
MAINTAINER  #镜像作者 例如:lvlvstart<halouworld@126.com>
RUN			#构建镜像需要运行的指令
ADD			#添加内容
WORKDIR		#镜像的工作目录,docker run 进入的开始目录
VOLUME		#挂载的目录
EXPOSE		#端口配置
CMD			#需要执行的命令容器运行的时候,替换命令
ENTRYPOINT	#执行的命令 ,容器运行的时候追加命令
ONBUILD		#在构建过程中除非的指令
COPY		#类似Add,将文件拷贝到镜像中
ENV			#构建的时候,设置环境变量
利用dockerfile 构建一个 spring boot 的 hello world
#创建一个sprong boot web 的工程 并打包 略
#编写DockerFile
vim Dockerfile
 FROM java:8
 COPY *.jar /hello_app.jar
 CMD ["--server-port=8080"]
 EXPOSE 8080
 ENTRYPOINT ["java","-jar","/hello_app.jar"]
 
#构建镜像
sudo docker build -t helloworld .

#查看构建成功的镜像
super@super-TM1707:~/dockerfile/helloworld$ sudo docker images
REPOSITORY   TAG             IMAGE ID       CREATED         SIZE
helloworld   latest          69aa8ec89cb1   2 minutes ago   643MB

sudo docker run -d -P --name hello helloworld


Docker 网络

#docker 默认的网卡docker0 , 使用docker0 进行docker容器间的通信
#docekr 的网络默认采用桥接模式
#docker 使用的是 evth-pair 技术, 提供一对虚拟接口,一般的桥接技术都是采用的这种方式
创建网络命令
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet 
--driver 网卡模式
	bridge 桥接模式
--subnet 设置网段
--gateway 设置网关
#最后跟上自定义的网络名字

#详细名字
https://docs.docker.com/engine/reference/commandline/network/
使用自定义网络
docker run -d -P --name tomcat01 --net mynet tomcat
#自定义网络 不用过多的设置,多个容器间就可以互相联通
查看自定网络
docker network inspect mynet

[
    {
        "Name": "mynet",
        "Id": "c4f35d15b8c97a764aef8af015d8e9540c500cde72111cfae044cdd67fafe8e1",
        "Created": "2020-12-31T11:32:09.545307634+08:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "192.168.0.0/16",
                    "Gateway": "192.168.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]

请关于一下啦^_^

微信公众号

原文地址:https://www.cnblogs.com/haloujava/p/14304432.html