Docker入门到精通开发指南

Docker入门到精通开发指南,第1张

Docker入门到精通开发指南

文章目录
  • 安装
    • 官方安装文档
    • 具体安装步骤
      • 1.卸载之前的版本(如果之前未用过忽略该步骤)
      • 2.安装相关依赖
      • 3.设置docker镜像
      • 4.安装docker
        • 安装latest版本
        • 指定版本安装
      • 5.启动docker
      • 6.查看docker版本
      • 7.运行一个docker hello world
      • 8.卸载docker
      • 9.配置阿里云镜像加速地址
  • docker常用命令
        • docker仓库搜索
        • 基础命令
          • docker版本信息
          • docker系统信息
        • 镜像命令
          • 查看本地主机上所有镜像
          • 搜索镜像
          • 下载镜像
          • 删除镜像
          • 批量删除镜像
        • 容器命令
          • 下载centos进行测试
            • 下载
            • 启动
            • 查看正在运行的docker
            • 退出容器
            • 删除容器
            • 启动和停止
        • 常用其他命令
          • 查看日志
          • 滚动查看日志,并且打印时间
          • 查看容器内部进程信息
          • 查看docker原信息
          • 进入当前运行的容器
          • 文件从容器内copy到主机上(手动命令行copy)
  • 可视化 Portainer
    • 安装
    • 具体使用参考文章
  • Commit镜像
    • 运行一个centos
    • 做一些修改 *** 作
    • 退出容器
    • 提交
  • 数据卷使用
    • 方式一:直接使用命令挂 -v
    • 实战:Mysql数据卷挂载
    • 方式二:具名挂载、匿名挂载
      • 匿名挂载
      • 具名挂载
      • 指定目录、具名、匿名三者区别
      • volume 容器内卷信息查看
        • volume ls 查看所有卷
        • volume inspect $VOLUM_NAME 查看卷信息
        • 扩展:指定容器内目录权限

安装 官方安装文档

地址:https://docs.docker.com/engine/install/centos/
这里使用Linux安装

具体安装步骤 1.卸载之前的版本(如果之前未用过忽略该步骤)
yum remove docker 
                  docker-client 
                  docker-client-latest 
                  docker-common 
                  docker-latest 
                  docker-latest-logrotate 
                  docker-logrotate 
                  docker-engine
2.安装相关依赖
 yum install -y yum-utils
3.设置docker镜像
yum-config-manager 
    --add-repo 
    https://download.docker.com/linux/centos/docker-ce.repo

阿里云

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4.安装docker 安装latest版本
yum install -y docker-ce docker-ce-cli containerd.io

这里会默认安装latest版本。

指定版本安装
  • 查看版本
> yum list docker-ce --showduplicates | sort -r
docker-ce.x86_64            3:20.10.9-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:20.10.9-3.el7                    @docker-ce-stable
docker-ce.x86_64            3:20.10.8-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:20.10.7-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:20.10.6-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:20.10.5-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:20.10.4-3.el7                    docker-ce-stable 
docker-ce.x86_64            3:20.10.3-3.el7                    docker-ce-stable
...
  • 指定版本安装
 sudo yum install docker-ce- docker-ce-cli- containerd.io

example:

docker-ce-18.09.1
5.启动docker
systemctl start docker
6.查看docker版本
> docker version
Client: Docker Engine - Community
 Version:           20.10.9
 API version:       1.41
 Go version:        go1.16.8
 Git commit:        c2ea9bc
 Built:             Mon Oct  4 16:08:14 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.9
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.8
  Git commit:       79ea9d3
  Built:            Mon Oct  4 16:06:37 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.11
  GitCommit:        5b46e404f6b9f661a205e28d59c982d3634148f8
 runc:
  Version:          1.0.2
  GitCommit:        v1.0.2-0-g52b36a2
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
7.运行一个docker hello world
docker run hello-world

8.卸载docker
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
9.配置阿里云镜像加速地址

登录阿里云->点击容器镜像服务

点击镜像加速

服务器配置,重启生效

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://${自己的id}.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker常用命令 docker仓库搜索

https://hub.docker.com/search?q=&type=image

基础命令 docker版本信息
docker version 
docker系统信息
docker info
镜像命令 查看本地主机上所有镜像
[root@test11 ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   3 weeks ago    13.3kB
redis         latest    621ceef7494a   9 months ago   104MB

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

# 其他指令
Options:
  -a, --all             列出所有镜像
  -q, --quiet          只显示镜像id
搜索镜像
[root@test11 ~]# docker search mysql
NAME                              DEscriptION                                     STARS     OFFICIAL   AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   11551     [OK]       
mariadb                           MariaDB Server is a high performing open sou…   4398      [OK]   
下载镜像

docker pull 镜像名[:TAG]

[root@test11 ~]# docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
b380bbd43752: Pull complete 
f23cbf2ecc5d: Pull complete 
30cfc6c29c0a: Pull complete 
b38609286cbe: Pull complete 
8211d9e66cd6: Pull complete 
2313f9eeca4a: Pull complete 
7eb487d00da0: Pull complete 
4d7421c8152e: Pull complete 
77f3d8811a28: Pull complete 
cce755338cba: Pull complete 
69b753046b9f: Pull complete 
b2e64b0ab53c: Pull complete 
Digest: sha256:6d7d4524463fe6e2b893ffc2b89543c81dec7ef82fb2020a1b27606666464d87
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest

docker pull mysql 与 docker pull docker.io/library/mysql:latest 相同

  • 指定版本下载
docker pull mysql:5.7
删除镜像
docker rmi -f IMAGEID|镜像名称 #空格可以删除多个镜像
批量删除镜像
docker rmi -f ${docker images -qa}
容器命令 下载centos进行测试 下载
[root@test11 ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
a1d0c7532777: Pull complete 
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest
启动
docker run [可选参数] iamge

# 参数说明
--name="Name01"	容器名称 app01 app02,用来区分启动的容器
-d	后台方式运行
-it	使用交互方式运行,进入容器查看内容
-p	指定容器的端口
	-p	主机端口:容器端口	(常用)
	-p	容器端口
-P	


# 启动并进入centos
docker run -it 5d0da3dc9764 /bin/bash
或
docker run -it centos /bin/bash

#退出容器
exit
查看正在运行的docker
docker ps

-a 查看历史运行过的docker
-n=? 显示最近的容器数量
-q	只显示容器的编号
退出容器
exit 退出并停止程序
ctrl + P + Q 容器不停止退出
删除容器
docker rm -f 容器id
docker rm -f  ${docker ps -qa}

# -f 可以删除在运行的容器,不使用-f只能删除未在运行的容器
启动和停止
docker start 容器id	# 启动
docker stop 容器id	# 停止
docker restart 容器id	# 重启
docker kill 容器id	# 强制停止
常用其他命令 查看日志
# docker logs --help

Usage:	docker logs [OPTIONS] ConTAINER

Fetch the logs of a container

Options:
      --details        Show extra details provided to logs
  -f, --follow         Follow log output
      --since string   Show logs since timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes)
      --tail string    Number of lines to show from the end of the logs (default "all")
  -t, --timestamps     Show timestamps
      --until string   Show logs before a timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes)
滚动查看日志,并且打印时间
> docker logs -f --tail 10 -t  ${容器id}
查看容器内部进程信息
docker top 容器ID
查看docker原信息
docker inspect 容器id
进入当前运行的容器

方法1(常用)

docker exec -it 容器id /bin/bash
# 进入容器后开启一个新的终端

方法2

docker attach 容器id
# 进入当前正在执行的终端
文件从容器内copy到主机上(手动命令行copy)
docker cp 容器id:容器内路径 目的主机路径
可视化 Portainer 安装
docker run -d -p 9000:9000 -v /root/portainer:/data -v /var/run/docker.sock:/var/run/docker.sock --name portainer portainer/portainer
具体使用参考文章

点击这里

Commit镜像

主要作用是将自己修改过的一些配置、文件等,提交成一个自己的镜像,类似于快照的功能。供自己后续使用。

这里用docker centos进行测试,我们再centos中加一些文件,然后commit成一个新的镜像。

运行一个centos
docker run -it centos /bin/bash
做一些修改 *** 作
# 默认没有安装vim
[root@f383457af325 /]# vim    
bash: vim: command not found
# 我们安装下vim
[root@f383457af325 /]# yum install vim 
# 再新增一个文件
[root@f383457af325 ~]# echo '123' > commit-test.txt
退出容器
ctrl + p + q 
提交
语法

docker commit [OPTIONS] ConTAINERID [REPOSITORY[:TAG]]

OPTIONS说明:

    -a :提交的镜像作者;

    -c :使用Dockerfile指令来创建镜像;

    -m :提交时的说明文字;

    -p :在commit时,将容器暂停。
[root@test11 ~]# docker commit -a "jast" -m "测试commit" f383457af325  test:v1.0.0
sha256:43f512a896d965ad26f9defb9194b1ce87489d2090f2f72e7ed7f4caef1ae908

commit后查看下提交后的image,此时镜像就提交成功。

[root@test11 ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED          SIZE
test          v1.0.0    43f512a896d9   29 seconds ago   304MB

启动commit后的镜像进行验证镜像是否为我们提交时的状态

# 运行我们commit的images
[root@test11 ~]# docker run -it 43f512a896d9 /bin/bash
[root@588a36c75d1e /]# cd
# 查看我们保存的文件,发现文件与内容都相同
[root@588a36c75d1e ~]# ls
anaconda-ks.cfg  anaconda-post.log  commit-test.txt  original-ks.cfg
[root@588a36c75d1e ~]# cat commit-test.txt 
123

文件内容都为之前我们保存的内容,说明我们commit生效

数据卷使用

将容器内的目录挂在到Linux,例将容器内的数据库数据存储目录放在Linux中,而不是容器中。

方式一:直接使用命令挂 -v
docker run -it -v 主机目录:容器内目录 [-v 主机目录:容器内目录]

1.主机目录不存在则会自动创建
2.修改是双向的,即双向绑定/同步的概念,在linux中直接修改主机目录下的文件,容器内也会同步修改。即便是容器停止,我们再Linux中修改文件,容器再次启动容器内也会修改。
查看容器挂载信息 Mounts

docker inspect 0b1f6a469354

...
"Mounts": [
            {
                "Type": "bind",
                "Source": "/home/testtest",
                "Destination": "/home",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],
...
实战:Mysql数据卷挂载
[root@test11 ~]# docker run -d -p 3333: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
83f08abd501cf0ae1bdc6adec5f4e3fc247abd081eb9ae0ec1d04d6b370828e8
  1. 挂载配置文件目录 -v /home/mysql/conf:/etc/mysql/conf.d
  2. 挂载数据目录 -v /home/mysql/data:/var/lib/mysql
  3. 指定密码 -e MYSQL_ROOT_PASSWORD=123456
  4. 执行容器名称 --name mysql01

服务器中测试连接
查看Linux挂载的目录,初始化的数据都存在

[root@test11 data]# ls
auto.cnf    client-cert.pem  ibdata1      ibtmp1              private_key.pem  server-key.pem
ca-key.pem  client-key.pem   ib_logfile0  mysql               public_key.pem   sys
ca.pem      ib_buffer_pool   ib_logfile1  performance_schema  server-cert.pem
[root@test11 data]# pwd
/opt/docker/mysql/data

在mysql中创建数据库test_001,查看linux目录也同时存在,说明数据卷挂载成功

[root@test11 data]# ls
auto.cnf    client-cert.pem  ibdata1      ibtmp1              private_key.pem  server-key.pem
ca-key.pem  client-key.pem   ib_logfile0  mysql               public_key.pem   sys
ca.pem      ib_buffer_pool   ib_logfile1  performance_schema  server-cert.pem  test_001
方式二:具名挂载、匿名挂载 匿名挂载
-v 容器内路径
docker run -d -P --name nginx01 -v /etc/nginx nginx
具名挂载
-v 名称:容器内路径
docker run -d -P --name nginx02 -v jmgz:/etc/nginx nginx
指定目录、具名、匿名三者区别
-v 容器内路径	# 匿名挂载
-v 卷名:容器内路径	# 具名挂载
-v /Linux路径:容器内路径	# 指定路径挂载(使用volume查看不到)

docker run -d -P --name nginx02 -v /home/nginx:/etc/nginx nginx
docker run -d -P --name nginx02 -v jmgz:/etc/nginx nginx
docker run -d -P --name nginx02 -v /etc/nginx nginx

指定目录以/开头
具名为名称开头
匿名只有一个容器内部的目录

volume 容器内卷信息查看 volume ls 查看所有卷
[root@test11 volumes]# docker volume ls 
DRIVER    VOLUME NAME
local     9c5d88889544e28e1268853fd91705401b29a80394bae71ebe1243d66d9f9243
local     325c6c6fcb0079b2ef18c573d3e76bf0186b8fdd610269f19f2e83ccfe53d7c8
local     b24d3abe53938a464810c298f9c02117c686d7fc06c4917932fd69f7e9ded284
local     b35cf901596e7bec2dd6244a28873a3b885fc6e4b429e8e27af9629e74884abe
local     jmgz
volume inspect $VOLUM_NAME 查看卷信息
[root@test11 volumes]# docker volume inspect jmgz
[
    {
        "CreatedAt": "2021-10-21T11:30:13+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/jmgz/_data",
        "Name": "jmgz",
        "Options": null,
        "Scope": "local"
    }
]
扩展:指定容器内目录权限
# -v 容器内路径:ro rw 改变读写权限
ro	readonly # 只读
rw readwrite	# 读写

docker run -d -P --name nginx02 -v jmgz:/etc/nginx:ro nginx
docker run -d -P --name nginx02 -v jmgz:/etc/nginx:rw nginx

# ro 设置之后容器对容器内的文件只有读的权限,需要修改只能通过Linux中进行 *** 作

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/3998445.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-10-22
下一篇 2022-10-22

发表评论

登录后才能评论

评论列表(0条)

保存