首页 > 技术文章 > Docker的基本使用

hsiehchou 2019-03-05 19:30 原文

Docker在Linux中的安装

一、rpm离线安装docker17.12

1.下载docker安装包

https://download.docker.com/linux/centos/7/x86_64/stable/Packages/下载docker-ce-17.12.0.ce-1.el7.centos.x86_64.rpm

2.下载9个依赖

http://mirrors.163.com/centos/7/os/x86_64/Packages/下载8个依赖
audit-libs-python-2.7.6-3.el7.x86_64.rpm
checkpolicy-2.5-4.el7.x86_64.rpm
libcgroup-0.41-13.el7.x86_64.rpm
libseccomp-2.3.1-3.el7.x86_64.rpm
libsemanage-python-2.5-8.el7.x86_64.rpm
policycoreutils-python-2.5-17.1.el7.x86_64.rpm
python-IPy-0.75-6.el7.noarch.rpm
setools-libs-3.3.8-1.1.el7.x86_64.rpm

http://rpm.pbone.net/index.php3?stat=3&limit=1&srodzaj=1&dl=40&search=container-selinux&field[]=1&field[]=2下载container-selinux-2.9-4.el7.noarch.rpm

rpm -ivh /root/docker/*.rpm –nodeps –force

curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -

启动Docker引擎

sudo systemctl enable docker
sudo systemctl start docker

建立docker用户组

sudo groupadd docker

将用户加入docker组

sudo usermod -aG docker $USER

这里使用阿里云的容器镜像服务,目前公测,免费的。
1) 去阿里云官网,登录控制台,在产品与服务里面找到容器镜像服务
2)点击开通
3) 点击镜像加速器,变有了加速地址(不用镜像加速器的话,镜像都是国外的,因为墙,所有下载是龟速)

镜像加速器

vi /etc/systemd/system/multi-user.target.wants/docker.service
ExecStart=/usr/bin/dockerd –registry-mirror=https://….mi
rror.aliyuncs.com

sudo systemctl daemon-reload
sudo systemctl restart docker

检查加速器是否生效

sudo ps -ef | grep dockerd
root 5346 1 0 19:03 ? 00:00:00 /usr/bin/dockerd
–registry-mirror=https://*****.mirror.aliyuncs.com

docker -v

systemctl start docker

验证 docker 是否安装成功并在容器中执行一个测试的镜像
docker run ubuntu echo hello docker

docker run nginx

docker run -p 8080:80 -d nginx
http://192.168.116.104:8080/

[root@test3 share]# docker cp index.html
[root@test3 share]# docker commit -m ‘fun’ d0e976512485 nginx-fun

删除镜像

docker rmi IMAGE ID

查看镜像

docker images
docker ps -a

小结

命令 用途
docker pull 获取image
docker build 创建image
docker images 列出image
docker run 运行container
docker ps 列出container
docker rm 删除container
docker rmi 删除image
docker cp 在host 和container之间拷贝文件
docker commit 保存改动为新的image

Dockerfile语法

FROM alpine:latest
MAINTAINER hsiehchou
CMD echo ‘hello docker’

touch Dockerfile

++++++++++++++++++++++++++++++++++++++++
FROM ubuntu
MAINTAINER hsiehchou
RUN sed -i ‘s/archive.ubuntu.com/mirros.ustc.edu.cn/g’ /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y nginx
COPY index.html /var/www/html
ENTRYPOINT [“/usr/sbin/nginx”, “-g”, “daemon off;”]前台运行
EXPOSE 80

docker build -t hsiehchou/hello-nginx .

docker run -d -p 80:80 hsiehchou/hello-nginx

小结

命令 用途
FROM base image
RUN 执行命令
ADD 添加文件
COPY 拷贝文件
CMD 执行命令
EXPOSE 暴露端口
WORKDIR 指定路径
MIANTAINER 维护者
ENV 设定环境变量
ENVRYPOINT 容器入口
USER 指定用户
VOLUME mount point

镜像分层

Dockerfile中的每一行都产生一个新层

Volume

提供独立于容器之外的持久化存储

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

docker exec -it nginx /bin/bash

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

++++++++++++++++++++++++++++
docker create -v $PWD/data:/var /mydata –name data_container ubuntu

docker run -it –volumes-from data_container ubuntu /bin/bash
mount

Registry

镜像仓库

术语

English 中文
host 宿主机
image 镜像
container 容器
registry 仓库
daemon 守护程序
client 客户端

docker search whalesay
docker pull docker/whalesay
docker push myname/whalesay

国内的一些仓库
daocloud
时速云
aliyun

[root@test3 dockerfiler2]# docker run docker/whalesay cowsay Docker你好!

docker tag docker/whalesay hch/whalesay

curl -L https://github.com/docker/compose/releases/download/1.9.0/docker-compose-(uname -m) > /usr/local/bin/docker-compose

docker-compose.yml常用命令

命令 用途
build 本地创建镜像
command 覆盖缺省命令
depends_on 连接容器
ports 暴露端口
volumes
image pull镜像

docker-compose命令

命令 用途
up 启动服务
stop 停止服务
rm 删除服务中的各个容器
logs 观察各个容器的日志
ps 列出服务相关的容器

docker基本命令

docker ps :查看正在运行的容器
docker images:查看现有的镜像
docker logs: 查看某个容器的日志
docker run: 运行某个容器
docker inspect:查看某个容器
docker exec:进入某个容器
docker start/stop:启动或者停止某个容器

[root@test3 hadoop-docker]# touch Dockerfile
[root@test3 hadoop-docker]# ll
total 0
-rw-r–r– 1 root root 0 Feb 27 19:18 Dockerfile
[root@test3 hadoop-docker]# vim Dockerfile

FROM ubuntu:14.04
MAINTAINER hsiehchou
WORKDIR /root
# install openssh-server, openjdk and wget
RUN apt-get update && apt-get install -y openssh-server openjdk-7-jdk wget
# install hadoop 2.7.2
RUN wget https://github.com/kiwenlau/compile-hadoop/release/download/2.7.2/hadoop-2.7.2.tar.gz && \
tar -zxvf hadoop-2.7.2.tar.gz && \
mv hadoop-2.7.2 /usr/local/hadoop && \
rm hadoop-2.7.2.tar.gz
# set environment variable
ENV JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd-64
ENV HADOOP_HOME=/usr/local/hadoop
ENV PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin
# ssh without key
RUN ssh-keygen -t rsa -f ~/.ssh/id_rsa -p '' && \
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
RUN mkdir -p ~/hdfs/namenode && \
mkdir -p ~/hdfs/datanode && \
mkdir $HADOOP_HOME/logs
COPY config/* /tmp/
RUN mv /tmp/ssh_config ~/.ssh/config && \
mv /tmp/hadoop-env.sh /usr/local/hadoop/etc/hadoop/hadoop-env.sh && \
mv /tmp/hdfs-site.xml $HADOOP_HOME/etc/hadoop/hdfs-site.xml && \
mv /tmp/core-site.xml $HADOOP_HOME/etc/hadoop/core-site.xml && \
mv /tmp/mapred-site.xml $HADOOP_HOME/etc/hadoop/mapred-site.xml && \
mv /tmp/yarn-site.xml $HADOOP_HOME/etc/hadoop/yarn-site.xml && \
mv /tmp/slaves $HADOOP_HOME/etc/hadoop/slaves && \
mv /tmp/start-hadoop.sh ~/start-hadoop.ssh && \
mv /tmp/run-wordcount.sh ~/run-wordcount.sh
RUN chmod +x ~/start-hadoop.sh && \
chmod +x ~/run-wordcount.sh && \
chmod +x $HADOOP_HOME/sbin/start-dfs.sh && \
chmod +x $HADOOP_HOME/sbin/start-yarn.sh
# format namenode
RUN /usr/local/hadoop/bin/hdfs namenode -format
CMD ["sh", "-c", "service ssh start: bash"]

推荐阅读