5

Docker基本使用命令

 3 years ago
source link: http://dockone.io/article/2434392
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Docker基本使用命令


刚看别人使用Docker的时候有很多不解,为什么要用Docker,Docker怎么用?Docker配置为什么这么难?为什么网络访问不通?等等因素阻碍了笔者学习Docker?其实笔者也很笨,有很多思考不清晰的点。顺便也分享下。

学时疑惑:

Q:我一套服务为什么不放在一个容器里面(Java、MySQL、Nginx、Redis等)?
A:因为既要维护容器内网络,又要维护端口等等之类的东西,Docker就是为了快速搭建环境而生的,而且Docker最好也是一个服务一个容器,这样好打理。

Q:Docker能放到生产环境吗?
A:在公司没有专门的运维团队情况下,不建议使用Docker部署的环境作为生产环境,因为不仅仅要维护项目和中间件,Docker或者Kubernetes出现问题后,还要解决这些问题,也就是还要解决Docker的问题。如果在没有专门运维团队的情况下,最好使用某里云的服务,例如RDS,SLB等,最起码别人还会帮你维护你的数据库和服务。
# 以Redis为例子
docker pull redis
docker run \
-d \ # 后台运行
--name redis6 \ # 自定义名字
-p 6379:6379 \ # 端口映射
redis # 镜像名称
docker run -d --name redis6 -p 6379:6379 redis redis-server --appendonly yes --requirepass "123456" # 完整命令

第一种(不推荐,当退出容器使用exit命令时,会停止这个容器):
docker attach 容器id

第二种:
docker exec -it 容器id /bin/bash
docker stop 容器id
docker start 容器id

查询容器列表

docker ps -a # 查看所有容器
docker ps # 查看运行中的容器

run和start的区别:
  • run是创建一个新的容器
  • start是把已经创建好的容器启动

查看容器信息

docker inspect 容器id

容器里面的文件都是在容器内部,而跟你当前电脑是没有关系的,如果删除了容器怎么办?但是资料又想保存就像MySQL一样,我只是换一台电脑就要把整个容器复制过去,太麻烦了!所以需要把容器的文件跟当前主机文件作为一个映射
参数-v宿主机路径:容器路径
# 以MySQL为例子
docker run -d --name mysql8 -p 3306:3306 -v /data/mysql8/config:/etc/mysql/conf.d -v /data/mysql8/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
# 以上的命令可以参考:https://hub.docker.com/_/mysql,里面有详细介绍

为什么要知道这么多路径或者参数

每个中间件或者一个数据库容器,他可能需要有很多配置,例如密码,持久化文件的路径等等。那我们怎么知道路径是什么:
  1. 可以进hub.docker.com找到自己需要的容器然后看文档
  2. 进容器找了(这个方法有点笨,笔者一开始就是这么找到的。)

容器之间怎么进行通讯

容器虽然是能相互通讯的,但是容器每次重启ip都跟上一次不一样,所以这样通讯会很复杂。
# 先拉个CentOS镜像下来
docker pull centos
# 创建个容器
docker run -d -it --name centos1 centos
docker run -d -it --name centos2 centos

docker inspect centos1_id

截取一些容器信息下来:
[
{
    "NetworkSettings": {
        "Networks": {
            "bridge": {
                "IPAMConfig": null,
                "Links": null,
                "Aliases": null,
                "NetworkID": "9e7ed6d29ca3474de04409833e39b7c7965c7c63d3a1f509886a7a998e4825f8",
                "EndpointID": "41230bf523fac8fa4933989d98baaaa7655fba5c5dadd14e63839ffe868ed3f8",
                "Gateway": "172.17.0.1",
                "IPAddress": "172.17.0.4",
                "IPPrefixLen": 16,
                "IPv6Gateway": "",
                "GlobalIPv6Address": "",
                "GlobalIPv6PrefixLen": 0,
                "MacAddress": "02:42:ac:11:00:04",
                "DriverOpts": null
            }
        }
    }
}

docker inspect centos2_id
[
{
    "NetworkSettings": {
        "Networks": {
            "bridge": {
                "IPAMConfig": null,
                "Links": null,
                "Aliases": null,
                "NetworkID": "9e7ed6d29ca3474de04409833e39b7c7965c7c63d3a1f509886a7a998e4825f8",
                "EndpointID": "8ae77d46887c795983ee7a8fb96951d05e236b4ca4b4caa5d5964f892e18a476",
                "Gateway": "172.17.0.1",
                "IPAddress": "172.17.0.5",
                "IPPrefixLen": 16,
                "IPv6Gateway": "",
                "GlobalIPv6Address": "",
                "GlobalIPv6PrefixLen": 0,
                "MacAddress": "02:42:ac:11:00:05",
                "DriverOpts": null
            }
        }
    }
}

  • 以上centos1 ip为172.17.0.4
  • 以上centos2 ip为172.17.0.5
docker network create centos-network
docker run -d -it --network centos-network --name centos3 centos
docker run -d -it --network centos-network --name centos4 centos
docker exec -it centos3_id /bin/bash
ping centos4 
# 所以当创建了一个network后 容器都能加入到这个网络里面,很方便

这样就可以解决每次容器重启后ip不一致问题。
其实在刚使用容器的时候会很麻烦:
  1. 不知道Docker的命令和容器需要的参数
  2. 每次都要上官网找下有什么参数或者百度,但相比每次下载文件下来,进去配置省很多力气,并且配置一次保存好用过的命令,以后都可以用了,不需要再重复去改很多东西
  3. 其实在一些小型公司,没有专业的运维的话尽量不要在生产环境上使用Docker,不然真的出现问题的话会很头疼,不仅仅要维护项目,还要维护Docker
原文链接:https://juejin.cn/post/6974427129748389902,作者:Kakki

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK