一、安裝docker
1、檢查內核版本,必須是3.10及以上
uname -r
2、安裝docker
使用yum: yum install docker
不使用yum: wget -qO- https://get.docker.com/ | sh
3、輸入y確認安裝
4、啓動docker
[root@localhost ~]# systemctl start docker
[root@localhost ~]# docker -v
Docker version 1.12.6, build 3e8e77d/1.12.6
5、開機啓動docker
[root@localhost ~]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
6、停止docker
systemctl stop docker
二、常用命令&操作
1、鏡像操作
操作 | 命令 | 說明 |
---|---|---|
檢索 | docker search 關鍵字 eg:docker search redis | 我們經常去docker hub上檢索鏡像的詳細信息,如鏡像的TAG。 |
拉取 | docker pull 鏡像名:tag | :tag是可選的,tag表示標籤,多爲軟件的版本,默認是latest |
列表 | docker images | 查看所有本地鏡像 |
刪除 | docker rmi image-id | 刪除指定的本地鏡像 |
2、容器操作
軟件鏡像(QQ安裝程序)----運行鏡像----產生一個容器(正在運行的軟件,運行的QQ);
步驟:
1、搜索鏡像
[root@localhost ~]# docker search tomcat
2、拉取鏡像
[root@localhost ~]# docker pull tomcat
3、根據鏡像啓動容器
docker run --name mytomcat -d tomcat:latest
4、docker ps
查看運行中的容器
5、 停止運行中的容器
docker stop 容器的id
6、查看所有的容器
docker ps -a
7、啓動容器
docker start 容器id
8、刪除一個容器
docker rm 容器id
9、啓動一個做了端口映射的tomcat
[root@localhost ~]# docker run -d -p 8888:8080 tomcat
-d:後臺運行
-p: 將主機的端口映射到容器的一個端口 主機端口:容器內部的端口
10、爲了演示簡單關閉了linux的防火牆
service firewalld status ;查看防火牆狀態
service firewalld stop:關閉防火牆
11、查看容器的日誌
docker logs container-name/container-id
更多命令參看參考每一個鏡像的文檔
3、安裝MySQL示例
docker pull mysql
錯誤的啓動
[root@localhost ~]# docker run --name mysql01 -d mysql
42f09819908bb72dd99ae19e792e0a5d03c48638421fa64cce5f8ba0f40f5846
mysql退出了
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
42f09819908b mysql "docker-entrypoint.sh" 34 seconds ago Exited (1) 33 seconds ago mysql01
538bde63e500 tomcat "catalina.sh run" About an hour ago Exited (143) About an hour ago compassionate_
goldstine
c4f1ac60b3fc tomcat "catalina.sh run" About an hour ago Exited (143) About an hour ago lonely_fermi
81ec743a5271 tomcat "catalina.sh run" About an hour ago Exited (143) About an hour ago sick_ramanujan
//錯誤日誌
[root@localhost ~]# docker logs 42f09819908b
error: database is uninitialized and password option is not specified
You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD;這個三個參數必須指定一個
正確的啓動
[root@localhost ~]# docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
b874c56bec49fb43024b3805ab51e9097da779f2f572c22c695305dedd684c5f
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b874c56bec49 mysql "docker-entrypoint.sh" 4 seconds ago Up 3 seconds 3306/tcp mysql01
做了端口映射
[root@localhost ~]# docker run -p 3306:3306 --name mysql02 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
ad10e4bc5c6a0f61cbad43898de71d366117d120e39db651844c0e73863b9434
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ad10e4bc5c6a mysql "docker-entrypoint.sh" 4 seconds ago Up 2 seconds 0.0.0.0:3306->3306/tcp mysql02
三、Docker鏡像下載加速
1、 進入docker在本機的配置目錄,
cd /etc/docker
2、 找到daemon.json文件,沒有新建
vi daemon.json
# 添加阿里雲代理
{
"registry-mirrors":["https://almtd3fa.mirror.aliyuncs.com"]
}
3、執行重啓docker命令:
service docker restart
四、Docker鏡像製作
1、 通過dockerfile製作docker
FROM ubuntu:xenial
# 定義變量 # nginx端口默認值
ENV NGINX_PORT=8888 \
# fastdfs端口默認值
FDFS_PORT=22122 \
# tracker/storage 數據和日誌目錄地址
FDFS_PATH=/home/face/fdfs \
#主機ip
HOST_IP=49.233.163.26 \
#組名
GROUP_NAME=group1
# 更新數據源
WORKDIR /etc/apt
RUN echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse' > sources.list \
&& echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse' >> sources.list \
&& echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse' >> sources.list \
&& echo 'deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse' >> sources.list \
&& apt-get update
# 安裝依賴
RUN apt-get install make gcc libpcre3-dev zlib1g-dev --assume-yes bash vim net-tools
# 創建目錄
RUN mkdir -p /home/face/fdfs
WORKDIR /usr/local/src
#複製並解壓縮各種源碼
ADD fastdfs-6.06.tar.gz /usr/local/src
ADD fastdfs-nginx-module-1.22.tar.gz /usr/local/src
ADD libfastcommon-1.0.43.tar.gz /usr/local/src
ADD nginx-1.17.9.tar.gz /usr/local/src
# 安裝 libfastcommon
WORKDIR /usr/local/src/libfastcommon-1.0.43
RUN ./make.sh && ./make.sh install
# 安裝 FastDFS / 修改fdfs配置文件
WORKDIR /usr/local/src/fastdfs-6.06/
RUN ./make.sh && ./make.sh install \
&& cp /usr/local/src/fastdfs-6.06/conf/* /etc/fdfs/ \
&& sed -i "s|/home/yuqing/fastdfs|${FDFS_PATH}|g" /etc/fdfs/storage.conf \
&& sed -i "s|/home/yuqing/fastdfs|${FDFS_PATH}|g" /etc/fdfs/tracker.conf \
&& sed -i "s|/home/yuqing/fastdfs|${FDFS_PATH}|g" /etc/fdfs/client.conf \
&& sed -i "s|http.server_port = .*$|http.server_port=${NGINX_PORT}|g" /etc/fdfs/storage.conf \
&& sed -i "s|group_name = .*$|group_name=${GROUP_NAME}|g" /etc/fdfs/storage.conf
#防盜鏈功能
#RUN sed -i "s|http.anti_steal.check_token = false |http.anti_steal.check_token=${CKECK_TOKEN}|g" /etc/fdfs/http.conf \
# && sed -i "s|FastDFS1234567890|${SECRET_KEY}|g" /etc/fdfs/http.conf \
# && sed -i "s|/home/yuqing/fastdfs/conf/anti-steal.jpg|${CKECK_FAIL}|g" /etc/fdfs/http.conf \
#配置fastdfs-nginx-module
RUN cp /usr/local/src/fastdfs-nginx-module-1.22/src/mod_fastdfs.conf /etc/fdfs/ \
&& sed -i "s|group_name=.*$|group_name=${GROUP_NAME}|g" /etc/fdfs/mod_fastdfs.conf \
&& sed -i "s|url_have_group_name =.*$|url_have_group_name=true|g" /etc/fdfs/mod_fastdfs.conf \
&& sed -i "s|store_path0=.*$|store_path0=${FDFS_PATH}|g" /etc/fdfs/mod_fastdfs.conf
#安裝nginx
WORKDIR /usr/local/src/nginx-1.17.9
RUN ./configure --add-module=/usr/local/src/fastdfs-nginx-module-1.22/src/ \
&& make && make install
#nginx配置文件上傳
ADD nginx.conf /usr/local/nginx/conf
RUN sed -i "s|listen.*$|listen ${NGINX_PORT};|g" /usr/local/nginx/conf/nginx.conf
#啓動命令
ADD start.sh /usr/local/bin/
ENTRYPOINT ["/usr/local/bin/start.sh"]
#暴漏端口
WORKDIR /
EXPOSE ${NGINX_PORT} ${FDFS_PORT} 23000
start.sh
#!/bin/sh
chmod 755 /etc/init.d/fdfs_trackerd
chmod 755 /etc/init.d/fdfs_storaged
sed -i "s|tracker_server = .*$|tracker_server=$HOST_IP:$FDFS_PORT|g" /etc/fdfs/storage.conf
sed -i "s|tracker_server = .*$|tracker_server=$HOST_IP:$FDFS_PORT|g" /etc/fdfs/client.conf
sed -i "s|tracker_server=.*$|tracker_server=$HOST_IP:$FDFS_PORT|g" /etc/fdfs/mod_fastdfs.conf
/etc/init.d/fdfs_trackerd start
/etc/init.d/fdfs_storaged start
/usr/local/nginx/sbin/nginx -g 'daemon off;'
dokcer-compose.xml
version: '3.1'
services:
fastdfs:
build: env
tty: true
# 該容器是否需要開機啓動+自動重啓
restart: always
container_name: fastdfs
image: newland/fastdfs:6.06
# 將本地目錄映射到docker容器內的fastdfs數據存儲目錄
volumes:
- ./fdfs:/home/face/fdfs
network_mode: host
2、構建過程
#開啓執行權限
chmod +x start.sh
# 構建建啓動容器,通過dokcer-compose文件
dokcer-compose up -d
# 構建建鏡像通過 dokcer run 啓動
docker build -t newland/fdfs .
# -e 對應的環境變量,只對sh裏面起作用
docker run --name fdfs11 -d -v /usr/local/docker/fastdfs4/fdfs:/home/face/fdfs -e HOST_IP=49.233.163.26 -p 8889:8888 -p 22122:22122 -p 23000:23000 newland/fdfs
#進入容器命令
docker exec -it fdfs11 /bin/bash
#查看環境變量
docker exec fdfs11 env
#如果出現倉庫鏡像存在,需要卸載存在鏡像
dokcer-compose down
3、鏡像倉庫
#遠程倉庫操作
# 修改tagh和倉庫名一致
docker tag fdfs jeffreyliu007/fdfs
#上傳
docker push jeffreyliu007/fdfs
#拉取
docker pull jeffreyliu007/fdfs
#本地鏡像操作
#保存到本地
docker save -o fdfs.tar newland/fdfs
#導入
docker load < fdfs.tar