Docker

1. 以非 root 权限运行 docker 命令

1. 添加docker用户组,默认情况下安装好已经创建
$ sudo groupadd docker
2. 将用户加入该group
$ sudo usermod -aG docker $USER
# 或者使用下面命令
$ sudo gpasswd -a ${USER} docker
3. 重启服务
$ sudo service docker restart
# 或者
$ sudo /etc/init.d/docker restart
4. 切换当前会话到新 group 或者重启 X 会话
   注意:这一步是必须的,否则因为 groups 命令获取到的是缓存的组信息,
   刚添加的组信息未能生效,所以 docker images 执行时同样有错。
$ newgrp - docker

2. docker 端口映射

docker run -p [宿主机端口号]:[docker内服务端口号] -d [镜像名称]
例如:
docker run -p 8080:80 -d nginx:latest
该命令得作用是把docker内的80端口映射到宿主机的8080端口,-d表示以守护进程启动

3. 往 docker 内拷贝文件

docker cp [文件] [容器id]:/[拷贝文件存放路径]
例如:
docker cp index.html 17add7bbc58c://usr/share/nginx/html

4. 保存对容器的修改

拷贝文件到docker容器内,停止容器后,再重新启动,发现容器又变成了最初的状态,可以通过如下的命令保存我们的修改:
docker commit -m [修改说明] [容器id] [新镜像名称]
此条命令返回的是新产生的镜像的id

例如:
docker commit -m "增加index.html" 17add7bbc58c nginx-index:0.1
新生成了镜像nginx-index,版本号是0.1,使用docker images命令可以看到

5. docker 操作

查看本地镜像:
docker images

下载镜像:
docker pull [镜像名称:版本]
例如:
docker pull ubuntu:16.04,不指定时默认ubuntu:latest

停止容器:
docker stop [容器id]

查看正在运行的容器:
docker ps

查看所有容器:
docker ps -a

删除容器:
docker rm [容器id]

删除镜像:
docker rmi [镜像id]

创建镜像:
docker build

搜索镜像:
docker search [镜像名称]

6. Dockerfile 构建

基础镜像
FROM ubuntu
作者
MAINTAINER xbf
运行的命令
更换软件源,加快下载速度
RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y nginx
COPY index.html /var/www/html
入口,将nginx作为非守护进程执行
ENTRYPOINT ["/usr/sbin/nginx", "-g", "daemon off;"]
EXPOSE 80

Dockerfile创建完成后,可以通过docker build命令创建镜像

docker build -t xbf/nginx-index .

7. 把容器中的目录映射到宿主机

docker run -d --name nginx -v /usr/share/nginx/html nginx

该命令的作用是把 nginx 容器中的/usr/share/nginx/html 目录映射到宿主机中,映射的位置可以通过 docker inspect nginx 命令查看,找到这一项内容

"Mounts": [
    {
        "Type": "volume",
        "Name": "07f040bfb50e76ff4f9b2e2c5edd4881921e5a7cc2257db062c209e5005fbaef",
        "Source": "/var/lib/docker/volumes/07f040bfb50e76ff4f9b2e2c5edd4881921e5a7cc2257db062c209e5005fbaef/_data",
        "Destination": "/usr/share/nginx/html",
        "Driver": "local",
        "Mode": "",
        "RW": true,
        "Propagation": ""
    }
],

其中的 source 就是在宿主机中的目录位置。对该目录的修改,会实时的反应在容器中。

8. 把宿主机中的目录挂载到容器中

docker run -p 80:80 -d -v $PWD/html:/usr/share/nginx/html nginx

表示把当前目录下的 html 目录挂载到容器的/usr/share/nginx/html 目录

9. 进入一个正在运行的容器

docker exec -it [容器id] /bin/bash

10. 从镜像挂载

产生一个仅有数据的容器
docker create -v $PWD/data:/var/mydata data_container ubuntu

data_container表示容器名称, ubuntu是基础镜像名称

创建容器挂载容器
docker run -it --volumes-from data_container ubuntu /bin/bash

11. 给镜像添加 tag

docker tag ubuntu colin/ubuntu

12. 提交镜像

当然提交前需要先登陆
docker login
输入用户名和密码
docker push colin/ubuntu

13. docker-compose 安装

sudo curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

查看是否安装成功
docker-compose --version
最后更新时间:
Contributors: CL