Docker 的简单使用记录

2016/8/5 posted in  软件配置 comments

编写 Dockerfile

在 CentOS 6 的基础上制作一个 MySQL 的容器,在 Dockerfile 中写入如下内容:

# Docker MySQL image

# Use centos:6 as base image
FROM centos:6

# Maintainer
MAINTAINER Tang Jiujun <jiujun.tang@gmail.com>

# Commands to update the images
RUN yum install -y mysql mysql-server;

# Copy my.cnf config
COPY etc/my.cnf /etc/my.cnf

RUN service mysqld start; \
    /usr/bin/mysqladmin -u root password 'root'; \
    mysql -uroot -proot -e "grant all privileges on *.* to 'root'@'%' identified by 'root';FLUSH PRIVILEGES;"

# Commands when start a new container
CMD ["/usr/bin/mysqld_safe"]

# Expose ports
EXPOSE 3306

构建 Docker 镜像

# 构建 docker 镜像,-t 指定镜像的 "name:tag", . 目录是 Dockerfile 所在的路径,
docker build -t="mysql:latest" .
# 清理所有未打过标签的本地镜像
docker rmi $(docker images -q -f "dangling=true")

运行 Docker 容器

# 运行容器,执行的 `/bin/bash` 会覆盖 Dockerfile 中的 CMD 命令
docker run -it --rm --name=db mysql /bin/bash

后台运行 Docker 容器

docker run -d -p 3306:3306 -v mysql_data:/var/lib/mysql --name=db mysql
# 查看执行后台运行容器的日志
docker logs -f db
# 删除所有已经停止的容器
docker rm $(docker ps -a -q)

连接已经运行的容器

# 连接到容器的 stdin 执行操作,如果退出 stdin 会导致容器停止
docker attach db
# 连接到容器并执行一个命令,有点类是 ssh
docker exec -it db bash

常见问题

  1. CentOS7 执行 systemctl 命令时,出现 Failed to get D-Bus connection: Operation not permitted

    # --privileged 不推荐在真实环境使用,可以用 --cap-add 和 --cap-drop 进行更精细的权限控制
    docker run -it -e container=docker --privileged --name=test centos /usr/sbin/init