zhaoyu@home:~$

配置

配置国内镜像

国内镜像有docker中国,网易,阿里等。 在/etc/docker/daemon.json中添加内容:

 {
    "registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com"]
 }

重启docker:service docker restart

配置容器的资源。

```shell script docker container run -d –name ch6_mariadb
–memory 256m
–cpu-shares 512
-e MYSQL_ROOT_PASSWORD=test mariadb:5.5

上述命令设置容器内存使用为256m。如果不设置,容器占满宿主机内存后,关闭容器。 设置cpu占用权重为512。
权重是相对于其他容器的。如共有三个容器,第一个cpu权重为1024,第二个和第三个为512,那么第一个容器,占用50%的cpu资源。

容器也可以通过`--device`配置设备,如摄像头。
```shell script
docker container run -it --rm \
--device /dev/video0:/dev/video0 \
ubuntu:16.04 ls -al /dev

用户和权限

容器的用户默认是在镜像中设置的。通过如下命令查看: ```shell script docker image inspect busybox:1.29 # 在其中查看.Config.User。 docker inspect –format “” busybox:1.29 # 直接查看用户,一般默认为空。

如果镜像中没有设置User,那么,容器默认使用root运行。

#### 设置容器运行的用户
```shell script
docker container run --rm -u nobody:nogroup busybox:1.29 id

卷的权限

新建一个测试文件garbage。 ```shell script echo “e=mc^2” > garbage chmod 600 garbage # 修改文件为仅owner访问。 sudo chown root garbage #属主修改root

用户为nobody的容器访问卷。报错:无权限
```shell script
docker container run --rm -v "$(pwd)"/garbage:/test/garbage \-u nobody \
ubuntu:16.04 cat /test/garbage

用户为root的容器访问卷,访问成功。 ```shell script docker container run –rm -v “$(pwd)”/garbage:/test/garbage
-u root ubuntu:16.04 cat /test/garbage

由上述例子可以看出,卷的权限需要和容器的用户保持一致,才可以正确访问。

### 定制OS的功能
默认情况下容器的操作系统提供了运行大多数应用必要的特性,删除了其他的特性。但是一些情况下,我们需要增加或者删除这些特性。如特性`NET_RAW`
非常危险,我们可以删除该特性。首先查看os是否提供了net_raw模块。
```shell script
docker container run --rm -u nobody ubuntu:16.04 /bin/bash -c "capsh --print | grep net_raw"

当启动容器时,我们可以使用--cap-drop net_raw删除该特性。 shell script docker container run --rm -u nobody --cap-drop net_raw ubuntu:16.04 /bin/bash -c "capsh --print | grep net_raw" --cap-add选项用来添加特性。