docker配置管理

文章目录

  • ubuntu 20.04
      • 1.docker安装
        • 下载源的公有key
        • 添加源
        • 安装
      • 2.docker卸载
      • 3.docker配置非用户使用
        • 第一种:添加入docker组
        • 第二种:无根模式
      • 4.开机自启
      • 5.docker日志
      • 6.配置监听
      • 7.docker命令
        • 显示已有镜像
        • 查看相关的镜像
        • 下载和删除镜像
        • 运行和停止
        • 列出正在运行的容器
        • 删除指定的容器
        • 停止指定的容器
        • 查看docker容器的shell标准输出
        • 进入正在运行的容器
        • docker 创建的容器开机自启动
        • 拷贝容器中的文件
      • 8.制作自己的镜像文件
        • 下载源码
        • 编写Dockerfile文件
        • 创建image文件
        • 生成容器
      • 9.docker文件的发布
      • 10.docker换源
      • 11.docker run参数
      • docker容器之前相互通信
        • 1.通过ip地址
        • 2.通过别名
      • 容器与外网进行通信
        • 1.指定DNS参数
        • 指定net参数
      • 实例
        • (1)mysql master to slave
          • 规划
          • 1.拉取mysql镜像
          • 3.配置主数据库
          • 3.生成master容器
          • 4.配置从数据库
          • 5.生成slave容器
          • 6.主数据库配置
          • 7.从数据库配置
          • 8.master-slave验证
  • Centos7
    • 安装docker
    • error
      • docker centos7 systemctl 报错:Failed to get D-Bus connection: Operation not permitted
      • 参考
      • 最后

ubuntu 20.04

1.docker安装

下载源的公有key

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

添加源

echo \
  "deb [arch=$(dpkg --print-architecture) 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

安装

apt-get update
apt-get install docker-ce docker-ce-cli containerd.io

2.docker卸载

apt-get install docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd

3.docker配置非用户使用

第一种:添加入docker组

​ docker使用unix套接字进行通信,在安装好docker后,为了让某一个用户可以不使用sudo直接使用docker,则需要将那个用户添加到docker组内,在安装了docker,docker组自动创建好,因此,使用以下命令将指定用户添加到docker组:

usermod -aG docker username

虚拟机的话需要重启,如有必要,可以使用以下命令更新group:

newgrp docker 

这样配置有一定的隐患,因为docker组拥有与root 用户等效的权限

第二种:无根模式

​ 无根模式允许以非 root 用户身份运行 Docker 守护进程和容器,以缓解守护进程和容器运行时中的潜在漏洞。

​ 无根模式即使在安装 Docker 守护进程的过程中也不需要 root 权限,只要满足先决条件即可。

4.开机自启

systemctl enable docker.service
systemctl enable containerd.service

5.docker日志

​ 默认情况下,Docker 会捕获所有容器的标准输出(和标准错误),并使用 JSON 格式将它们写入文件中。JSON 格式用它的来源(stdout或stderr)和它的时间戳来注释每一行。每个日志文件仅包含有关一个容器的信息。

6.配置监听

​ 默认情况下,Docker 守护进程侦听 UNIX 套接字上的连接以接受来自本地客户端的请求。通过将 Docker 配置为侦听 IP 地址和端口以及 UNIX 套接字,可以允许 Docker 接受来自远程主机的请求。

7.docker命令

显示已有镜像

docker image 

查看相关的镜像

docker search 镜像名

下载和删除镜像

docker image pull 镜像名

docker image rm 镜像名

运行和停止

有些容器不会自动终止,因为提供的是服务。比如,安装运行 Ubuntu 的 image,就可以在命令行体验 Ubuntu 系统。注意,run是生成新的容器,如果想要重复使用容器,应该使用start。

docker container run imagename
docker container start [containID]

docker container kill [containID]

列出正在运行的容器

# 列出本机正在运行的容器
docker container ls

# 列出本机所有容器,包括终止运行的容器
docker container ls --all

删除指定的容器

docker container rm [containerID]

停止指定的容器

docker container stop [containerID]

查看docker容器的shell标准输出

如果docker run命令运行容器的时候,没有使用-it参数,就要用这个命令查看输出。

docker container logs [containerID]

进入正在运行的容器

docker container exec命令用于进入一个正在运行的 docker 容器。如果docker run命令运行容器的时候,没有使用-it参数,就要用这个命令进入容器。一旦进入了容器,就可以在容器的 Shell 执行命令了。

docker container exec -it [containerID] /bin/bash

docker 创建的容器开机自启动

–restart是开机自启,update是将参数加入到容器中。

 docker update --restart=always 容器别名或容器id

拷贝容器中的文件

docker container cp命令用于从正在运行的 Docker 容器里面,将文件拷贝到本机。下面是拷贝到当前目录的写法。

docker container cp [containID]:[/path/to/file] .

8.制作自己的镜像文件

使用Dockerfile文本文件配置image,生成二进制的image文件

下载源码

编写Dockerfile文件

FROM node:8.4
COPY . /app
WORKDIR /app
RUN ["npm", "install", "--registry=https://registry.npm.taobao.org"]
EXPOSE 3000/tcp
  • FROM node:8.4:该 image 文件继承官方的 node image,冒号表示标签,这里标签是8.4,即8.4版本的 node,通过docker image ls 可查看node的标签。

  • COPY . /app:将当前目录下的所有文件(除了.dockerignore排除的路径),都拷贝进入 image 文件的/app目录。

  • WORKDIR /app:指定接下来的工作路径为/app

  • RUN npm install:在/app目录下,运行npm install命令安装依赖。注意,安装后所有的依赖,都将打包进入 image 文件。这一行执行的命令实际是:

    npm install --registry=https://registry.npm.taobao.org
    

    因此,其他的依赖包也可以以类似的方式安装。

  • EXPOSE 3000/tcp:将容器tcp 3000 端口暴露出来, 允许外部使用tcp连接这个端口。

如果想要生成的镜像产生容器后自动执行一些命令,可以在Dockerfile文件中添加以下内容:

CMD 完整命令

这样在容器启动后,以上命令就会自动执行。

另外,一个 Dockerfile 可以包含多个RUN命令,但是只能有一个CMD命令。

创建image文件

docker image build -t image文件名 .

.代表当前目录,这行命令意思是把当前目录下的内容通过Dockerfile文件的指示构建image文件,如果在当前目录下有不想要加入构建的部分,可以在构建之前新建.dockerignore文件,并在其中添加不想要加入构建的文件或目录名。

生成容器

docker container run -p 8000:3000 -it 镜像名 /bin/bash

-p代表把容器的3000端口映射到本机的8000端口。

-it代表把容器的shell映射到当前shell。

9.docker文件的发布

容器运行成功后,就确认了 image 文件的有效性。这时,我们就可以考虑把 image 文件分享到网上,让其他人使用。

首先,去 hub.docker.com 或 cloud.docker.com 注册一个账户。然后,用下面的命令登录。

$ docker login

接着,为本地的 image 标注用户名和版本。

$ docker image tag [imageName] [username]/[repository]:[tag]
# 实例
$ docker image tag koa-demos:0.0.1 ruanyf/koa-demos:0.0.1

也可以不标注用户名,重新构建一下 image 文件。

$ docker image build -t [username]/[repository]:[tag] .

最后,发布 image 文件。

$ docker image push [username]/[repository]:[tag]

发布成功以后,登录 hub.docker.com,就可以看到已经发布的 image 文件。

10.docker换源

vim /etc/default/docker

添加以下内容:

DOCKER_OPTS="--registry-mirror=https://registry.docker-cn.com"

11.docker run参数

参数 说明
-d 后台运行容器,并返回容器ID
-i 以交互模式运行容器,通常与 -t 同时使用
-P 随机端口映射,容器内部端口随机映射到主机的端口
-p 指定端口映射,格式为:主机(宿主)端口:容器端口
-t 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
–name="nginx-lb" 为容器指定一个名称
–dns 8.8.8.8 指定容器使用的DNS服务器,默认和宿主一致;
–dns-search example.com 指定容器DNS搜索域名,默认和宿主一致;
-h "mars" 指定容器的hostname
-e username="ritchie" 设置环境变量
–env-file=[] 从指定文件读入环境变量
–net="bridge" 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型
–link=[] 添加链接到另一个容器
–expose=[] 开放一个端口或一组端口
–volume , -v 绑定一个卷,挂载到容器内

docker容器之前相互通信

1.通过ip地址

​ docker安装成功后会产生一个网卡,这个网卡默认采用bridge方式,这个网卡作为网关,没生成一个容器都会动态分配一个ip地址,这些ip地址之间可以相互通信,因而可以通过查看容器ip地址以实现容器之间的通信。

​ 查看容器ip地址:

docker inspect 容器名或容器id

2.通过别名

​ 由于ip不稳定的,因此可以使用另一种方式完成容器之间的通信。

​ 比如

docker run --name slave --link master:master -p 5506:3306 -v /usr/local/docker/mysql/slave/conf:/etc/mysql/conf.d -v /usr/local/docker/mysql/slave/logs:/var/log/mysql -v /usr/local/docker/mysql/slave/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest

通过–link master:master可以指定容器名:别名,在使用的时候直接把容器ip地址换成别名即可。

容器与外网进行通信

1.指定DNS参数

docker run --dns 8.8.8.8 --name centos7  -dit centos:7 bash

指定net参数

docker run --net host --name centos7  -dit centos:7 bash

实例

(1)mysql master to slave

规划
  • 操作系统:ubuntu 20.04
  • 数据库版本:latest
  • 主数据库:master 映射到127.0.0.1:3306
  • 从数据库:slave 映射到127.0.0.1:3307
  • 读写分离:master 以写为主,slave以读为主
1.拉取mysql镜像
docker pull mysql:latest
3.配置主数据库
[mysqld]
bind-address = 0.0.0.0
server-id = 1
log-bin = mysql-bin
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
sql_mode = TRADITIONAL
key_buffer_size = 16M
max_allowed_packet = 8M
default_authentication_plugin = mysql_native_password

在生成master容器前,由于生成时想要把mysql的配置文件目录绑定在容器内的一个目录下,因此先生成响应的文件并写入配置,之后再生成master容器,否则将无法登录。

3.生成master容器

在生成的时候,需要配置以下环境变量的其中一个:

  • MYSQL_ROOT_PASSWORD
  • MYSQL_ALLOW_EMPTY_PASSWORD
  • MYSQL_RANDOM_ROOT_PASSWORD
docker run --name master -p 4406:3306 -v /usr/local/docker/mysql/master/conf:/etc/mysql/conf.d -v /usr/local/docker/mysql/master/logs:/var/log/mysql -v /usr/local/docker/mysql/master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest

4.配置从数据库
[mysqld]
bind-address = 0.0.0.0
server-id = 2
log-bin = mysql-bin
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
sql_mode = TRADITIONAL
key_buffer_size = 16M
max_allowed_packet = 8M
default_authentication_plugin = mysql_native_password
5.生成slave容器

​ 这里采用别名进行通信:

docker run --name slave --link master:master -p 5506:3306 -v /usr/local/docker/mysql/slave/conf:/etc/mysql/conf.d -v /usr/local/docker/mysql/slave/logs:/var/log/mysql -v /usr/local/docker/mysql/slave/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
6.主数据库配置

创建slave用户,并赋予复制所有表和库的权限

CREATE USER 'slave'@'%' identified by 'passSlave';

grant replication slave on *.* to 'slave'@'%';

flush privileges; 
7.从数据库配置

这里的master_host可以为运行slave时为master容器link的别名,也可以是master容器的ip地址。master_log_file需要配置好master后使用show master status;查看,

change master to master_host='master的ip地址',
master_user='slave',
master_password='passSlave',
master_log_file='mysql-bin.000003';
8.master-slave验证

在主数据库中创建数据库,插入数据,然后在从数据库中查看即可。

Centos7

安装docker

添加以下源中的一个:

yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo(中央仓库)

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(阿里仓库)

查看版本号

yum list docker-ce --showduplicates | sort -r

安装

yum -y install docker-ce-18.03.1.ce

使用systemctl开机自启

error

docker centos7 systemctl 报错:Failed to get D-Bus connection: Operation not permitted

解决方式:

以特权模式运行容器

docker run -d --name centos7 --net host --privileged=true centos:7 /usr/sbin/init

参考

    由于挺久的了,只记得到肯定参考了阮一峰的博客内容,为此,我去翻了翻他的博客。
阮一峰的docker入门

最后

同时欢迎访问我自己搭建的个人学习笔记,这个站点的一些笔记有些可能是没整理好的,很大原因是将来很长一段时间都不会花时间整理,所以就先放上面。
暂不欢迎访问我的个人博客,因为上面还没放可堪一放的文章。
这是以后可用于分享资源的站点,zfile是一个不错的github项目,因此我采用zfile搭建了这样一个关注于分享个人资源的站点。

你可能感兴趣的:(linux服务器管理,docker,容器,运维)