Docker的基本使用

一、Docker的核心概念

docker 包含四个基本概念:
 镜像(Image)
 容器(Container)
 仓库注册中心(Registry)
 仓库(Repository)

理解了这四个概念,就理解了 docker 的整个生命周期了!

1597733250429

1)镜像

Docker 镜像(Image)就是一个只读的模板。

Docker 镜像可以用来创建 Docker 容器。

Docker 镜像和 Docker 容器的关系,类似于 java 中 class 类与对象之间的关系。

Docker 提供了一个很简单的机制来创建镜像或者更新已有的镜像,用户甚至可
以直接从其他人那里下载一个已经做好的镜像来直接使用。

2)容器

Docker 利用容器(Container)来运行应用。

容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都
是相互隔离的、保证安全的平台。

可以把容器看成是一个简易版的 Linux 环境(包括 ROOT 用户权限、进程空间、
用户空间、网络等)和运行在其中的应用程序。

3)Registry&Repository

Registry 是集中存放镜像文件的场所。
Repository 是对于其中的镜像进行分类管理。

一个 Registry 中会有多个 Repository。
一个 Repository 中会有多个不同 tag 的 Image。

Registry 分为公有(public)和私有(private)两种形式。
 最大的公有 Registry 是 Docker Hub,存放了数量庞大的镜像供用户下载使用。
 国内的公开 Registry 包括 USTC、网易云、DaoCloud、AliCloud 等,可以供
大陆用户更稳当快捷的访问。
 用户可以在本地创建一个私有 Registry。

用户创建了自己的镜像之后就可以使用 push 命令将它上传的公有 Registry 或者
私有 Registry 中,这样下次在另一台机器上使用这个镜像的时候,只需要从
Registry 上 pull 下来运行就可以了。

官方仓库:https://hub.docker.com/

二、常用命令

安装、启动

参考:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors?spm=5176.12901015.0.i12901015.76b5525cYU7kug

# step 1: 安装必要的一些系统工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # Step 2: 添加软件源信息 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # Step 3: 更新并安装 Docker-CE sudo yum makecache fast sudo yum -y install docker-ce # Step 4: 开启(重启)Docker服务 sudo service docker start/restart 或者systemctl start docker.service、systemctl start docker
# step 1: 安装必要的一些系统工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # Step 2: 添加软件源信息 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # Step 3: 更新并安装 Docker-CE sudo yum makecache fast sudo yum -y install docker-ce # Step 4: 开启(重启)Docker服务 sudo service docker start/restart 或者systemctl start docker.service、systemctl start docker 
# step 1: 安装必要的一些系统工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # Step 2: 添加软件源信息 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # Step 3: 更新并安装 Docker-CE sudo yum makecache fast sudo yum -y install docker-ce # Step 4: 开启(重启)Docker服务 sudo service docker start/restart 或者systemctl start docker.service、systemctl start docker

配置镜像加速器(可选)

sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://31py2ung.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://31py2ung.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker 
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://31py2ung.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker

镜像操作

# 列出镜像 docker images # 搜索镜像 docker search 镜像名称 # 拉取镜像 docker pull <镜像名:tag> # 删除镜像 docker rmi repository:tag docker rmi imageID # 删除所有镜像 docker rmi $(docker images -q)
# 列出镜像 docker images # 搜索镜像 docker search 镜像名称 # 拉取镜像 docker pull <镜像名:tag> # 删除镜像 docker rmi repository:tag docker rmi imageID # 删除所有镜像 docker rmi $(docker images -q) 
# 列出镜像 docker images # 搜索镜像 docker search 镜像名称 # 拉取镜像 docker pull <镜像名:tag> # 删除镜像 docker rmi repository:tag docker rmi imageID # 删除所有镜像 docker rmi $(docker images -q)

容器操作

# 创建并运行容器 以交互方式运行容器: docker run -i -t --name 容器名称 repository:tag /bin/bash docker run -it --name 容器名称 imageID /bin/bash 以守护进程方式运行容器: docker run -di --name 容器名称 repository: docker run -di --name 容器名称 imageID 注意:通过 run 创建并进入容器之后,如果使用 exit 命令退出容器,则容器停止。 再次进入该容器,先使用 start 启动容器,再使用 exec/attach 命令进入容器。> 1)启动容器 docker start 容器名称或者容器ID 2)进入容器 进入正在运行的容器的命令如下: docker exec -it 容器名称或者容器ID /bin/bash docker attach 容器名称或者容器ID 两者之间的区别: attach 进入容器之后,如果使用 exit 退出容器,则容器停止。 exec 进入容器之后,使用 exit 退出容器,容器依然处于运行状态。 ======================================================== # 删除容器 docker rm <容器名 or ID> # 查看容器日志 docker logs -f <容器名 or ID> # 查看正在运行的容器 docker ps # 查看所有的容器,包括已经停止的。 docker ps -a # 删除所有容器 docker rm $(docker ps -a -q) # 停止、启动、杀死指定容器 docker start <容器名 or ID> # 启动容器 docker stop <容器名 or ID> # 停止容器 docker kill <容器名 or ID> # 杀死容器
# 创建并运行容器 以交互方式运行容器: docker run -i -t --name 容器名称 repository:tag /bin/bash docker run -it --name 容器名称 imageID /bin/bash 以守护进程方式运行容器: docker run -di --name 容器名称 repository: docker run -di --name 容器名称 imageID 注意:通过 run 创建并进入容器之后,如果使用 exit 命令退出容器,则容器停止。 再次进入该容器,先使用 start 启动容器,再使用 exec/attach 命令进入容器。> 1)启动容器 docker start 容器名称或者容器ID 2)进入容器 进入正在运行的容器的命令如下: docker exec -it 容器名称或者容器ID /bin/bash docker attach 容器名称或者容器ID 两者之间的区别: attach 进入容器之后,如果使用 exit 退出容器,则容器停止。 exec 进入容器之后,使用 exit 退出容器,容器依然处于运行状态。 ======================================================== # 删除容器 docker rm <容器名 or ID> # 查看容器日志 docker logs -f <容器名 or ID> # 查看正在运行的容器 docker ps # 查看所有的容器,包括已经停止的。 docker ps -a # 删除所有容器 docker rm $(docker ps -a -q) # 停止、启动、杀死指定容器 docker start <容器名 or ID> # 启动容器 docker stop <容器名 or ID> # 停止容器 docker kill <容器名 or ID> # 杀死容器 
# 创建并运行容器 以交互方式运行容器: docker run -i -t --name 容器名称 repository:tag /bin/bash docker run -it --name 容器名称 imageID /bin/bash 以守护进程方式运行容器: docker run -di --name 容器名称 repository: docker run -di --name 容器名称 imageID 注意:通过 run 创建并进入容器之后,如果使用 exit 命令退出容器,则容器停止。 再次进入该容器,先使用 start 启动容器,再使用 exec/attach 命令进入容器。> 1)启动容器 docker start 容器名称或者容器ID 2)进入容器 进入正在运行的容器的命令如下: docker exec -it 容器名称或者容器ID /bin/bash docker attach 容器名称或者容器ID 两者之间的区别: attach 进入容器之后,如果使用 exit 退出容器,则容器停止。 exec 进入容器之后,使用 exit 退出容器,容器依然处于运行状态。 ======================================================== # 删除容器 docker rm <容器名 or ID> # 查看容器日志 docker logs -f <容器名 or ID> # 查看正在运行的容器 docker ps # 查看所有的容器,包括已经停止的。 docker ps -a # 删除所有容器 docker rm $(docker ps -a -q) # 停止、启动、杀死指定容器 docker start <容器名 or ID> # 启动容器 docker stop <容器名 or ID> # 停止容器 docker kill <容器名 or ID> # 杀死容器

端口、数据卷

# 后台运行 docker run -d <Other Parameters> docker run -d -p 127.0.0.1:33301:22 centos6-ssh # 暴露端口: 一共有三种形式进行端口映射 docker -p ip:hostPort:containerPort # 映射指定地址的主机端口到容器端口 # 例如:docker -p 127.0.0.1:3306:3306 映射本机3306端口到容器的3306端口 docker -p ip::containerPort # 映射指定地址的任意可用端口到容器端口 # 例如:docker -p 127.0.0.1::3306 映射本机的随机可用端口到容器3306端口 docerk -p hostPort:containerPort # 映射本机的指定端口到容器的指定端口 # 例如:docker -p 3306:3306 # 映射本机的3306端口到容器的3306端口 # 映射数据卷 docker -v /home/data:/opt/data # 这里/home/data 指的是宿主机的目录地址,后者则是容器的目录地址
# 后台运行 docker run -d <Other Parameters> docker run -d -p 127.0.0.1:33301:22 centos6-ssh # 暴露端口: 一共有三种形式进行端口映射 docker -p ip:hostPort:containerPort # 映射指定地址的主机端口到容器端口 # 例如:docker -p 127.0.0.1:3306:3306 映射本机3306端口到容器的3306端口 docker -p ip::containerPort # 映射指定地址的任意可用端口到容器端口 # 例如:docker -p 127.0.0.1::3306 映射本机的随机可用端口到容器3306端口 docerk -p hostPort:containerPort # 映射本机的指定端口到容器的指定端口 # 例如:docker -p 3306:3306 # 映射本机的3306端口到容器的3306端口 # 映射数据卷 docker -v /home/data:/opt/data # 这里/home/data 指的是宿主机的目录地址,后者则是容器的目录地址 
# 后台运行 docker run -d <Other Parameters> docker run -d -p 127.0.0.1:33301:22 centos6-ssh # 暴露端口: 一共有三种形式进行端口映射 docker -p ip:hostPort:containerPort # 映射指定地址的主机端口到容器端口 # 例如:docker -p 127.0.0.1:3306:3306 映射本机3306端口到容器的3306端口 docker -p ip::containerPort # 映射指定地址的任意可用端口到容器端口 # 例如:docker -p 127.0.0.1::3306 映射本机的随机可用端口到容器3306端口 docerk -p hostPort:containerPort # 映射本机的指定端口到容器的指定端口 # 例如:docker -p 3306:3306 # 映射本机的3306端口到容器的3306端口 # 映射数据卷 docker -v /home/data:/opt/data # 这里/home/data 指的是宿主机的目录地址,后者则是容器的目录地址

复制文件

docker cp 源文件 目标文件 ====================== 比如: docker cp /root/boot.war my-centos:/usr/local/ 注意:源文件可以是宿主机器也可以是容器中的文件,同样,目标文件可以是容 器也可以是宿主机器的文件。
docker cp 源文件 目标文件 ====================== 比如: docker cp /root/boot.war my-centos:/usr/local/ 注意:源文件可以是宿主机器也可以是容器中的文件,同样,目标文件可以是容 器也可以是宿主机器的文件。 
docker cp 源文件 目标文件 ====================== 比如: docker cp /root/boot.war my-centos:/usr/local/ 注意:源文件可以是宿主机器也可以是容器中的文件,同样,目标文件可以是容 器也可以是宿主机器的文件。

制作镜像

docker commit 容器名称或者容器ID 新镜像名称
docker commit 容器名称或者容器ID 新镜像名称 
docker commit 容器名称或者容器ID 新镜像名称

在容器内部安装vim(不建议使用,可使用挂载)

apt-get update apt-get install vim
apt-get update apt-get install vim 
apt-get update apt-get install vim

查看容器详细信息

docker inspect 容器名称
docker inspect 容器名称 
docker inspect 容器名称

查看容器启动日志

docker logs 容器名称
docker logs 容器名称 
docker logs 容器名称

三、应用

A)nginx

1)拉取镜像

docker pull nginx
docker pull nginx 
docker pull nginx

2)创建nginx容器、指定端口为80

docker run -di --name=my-nginx -p 9080:80 nginx
docker run -di --name=my-nginx -p 9080:80 nginx 
docker run -di --name=my-nginx -p 9080:80 nginx

3)浏览器验证

1597736617403

B)MySQL

1)拉取镜像

# 查找镜像 docker search mysql # 拉取相应镜像 docker pull mysql:5.7
# 查找镜像 docker search mysql # 拉取相应镜像 docker pull mysql:5.7 
# 查找镜像 docker search mysql # 拉取相应镜像 docker pull mysql:5.7

2)创建mysql容器

docker run -di --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
docker run -di --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7 
docker run -di --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7

3)查看容器

1598499506367

4)使用工具连接测试

1598500159999

四、推荐文章

https://github.com/MrFiona/Docker-Summary/tree/master/Docker%E4%B8%AA%E4%BA%BA%E7%AC%94%E8%AE%B0

原文链接:https://www.cnblogs.com/zomicc/p/13527704.html

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享