安裝docker
1.注意安裝ce
yum install -y yum-utils device-mapper-persistent-data vm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce-18.09.7 docker-ce-cli-18.09.7 containerd.io
systemctl enable docker
systemctl start docker
2.編輯daemon.json,添加鏡像地址
vi /etc/docker/daemon.json
添加以下代碼:
{"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]}
systemctl daemon-reload
systemctl restart docker
3.啟動與停止docker
開啟:systemctl start docker
狀態(tài):systemctl status docker
停止:systemctl stop docker
重啟:systemctl restart docker
開機啟動:systemctl enable docker
查看概要:docker --help
4.鏡像相關(guān)命令
查看鏡像:docker images
搜索鏡像:docker search centos
拉取鏡像:docker pull centos:7
刪除鏡像:docker rmi 鏡像ID
刪除所有鏡像:docker rmi `docker images -q`
5.容器相關(guān)命令
查看正在運行的容器:docker ps
查看所有容器:docker ps -a
查看最后一次運行的容器:docker ps -l
查看停止的容器:docker ps -f status=exited
創(chuàng)建容器:docker run
(1)交互式方式創(chuàng)建容器:
docker run -it --name=容器名稱 鏡像名稱:標簽 /bin/bash
docker run -it --name=mycentos centos:7 /bin/bash 之后會進入容器內(nèi)
退出當(dāng)前容器:exit但荤,當(dāng)退出条篷,容器自動停止
(2)守護式方式創(chuàng)建容器:
docker run -di --name=容器名稱 鏡像名稱:標簽
docker run -di --name=mycentos2 centos:7 之后不會進入容器內(nèi)
進入方式:docker exec -it mycentos2 /bin/bash
退出當(dāng)前容器:exit剿牺,當(dāng)退出,容器還在運行
停止與啟動容器:docker stop/start
(1)停止:docker stop 容器名稱(或者容器ID)
docker stop centos2
(2)啟動:docker start 容器名稱(或者容器ID)
docker start centos2
文件拷貝:
(1)文件拷貝到容器:docker cp 需要拷貝的文件或目錄 容器名稱:容器目錄
docker cp daemon.json mycentos2:/usr/local
(2)文件從容器拷貝出來:docker cp 容器名稱:容器目錄 需要拷貝的文件或目錄
docker cp mycentos2:/usr/local/daemon.json daemon.json
目錄掛載:
創(chuàng)建容器 添加-v參數(shù) 后面為 宿主機目錄:容器目錄,例如:
docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7
查看容器的ip地址:
docker inspect 容器名稱(容器id)
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名稱(容器id)
刪除容器:
docker rm 容器名稱(容器id)
6.應(yīng)用部署
6.1 mysql部署
(1)拉取mysql鏡像
docker pull centos/mysql-57-centos7
(2)創(chuàng)建容器
docker run -di --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1234 mysql:5.7 --lower_case_table_names=1
(3)進入mysql容器
docker exec -it tensquare_mysql /bin/bash
(4)登錄mysql
mysql -u root -p
(5)遠程登錄mysql:連接宿主機ip竭贩,指定端口為33306
mysql-8.0.x連接報錯問題:https://www.cnblogs.com/zhurong/p/9898675.html
6.2 tomcat部署
(1)拉取tomcat鏡像
docker pull tomcat:7-jre7
(2)創(chuàng)建容器
docker run -di --name=mytomcat -p 80:8080 -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat
(3)發(fā)布應(yīng)用
cd /usr/local/webapps
6.3 Nginx部署
(1)拉取
docker pull nginx
(2)創(chuàng)建容器
docker run -di --name=mynginx -p 80:80 nginx
(3)發(fā)布應(yīng)用
docker exec -it mynginx /bin/bash
cd /etc/engix
cat nginx.conf
/etc/nginx/conf.d#
docker cp myhtml mynginx:/usr/share/nginx/
6.4 Redis部署
(1)拉取
docker pull redis
(2)創(chuàng)建容器
docker run -di --name=redis -p 6379:6379 redis
7.遷移與備份
(1)容器保存為鏡像:
docker commmit mynginx mynginx_i
(2)鏡像備份
docker save -o mynginx.tar mynginx_i
(3)鏡像回復(fù)與遷移
docker load -i mynginx.tar
執(zhí)行后再次查看鏡像瑞躺,可以看到鏡像已經(jīng)恢復(fù)
8.Dockerfile
8.1 Dockerfile 常用命令:
1)FROM : FROM 鏡像指令指明了當(dāng)前鏡像繼承的基鏡像敷搪,編譯當(dāng)前鏡像時會自動下載基鏡像 ,如果不指定映像url 則從docker hub 上獲取。 e.g : FROM ubuntu
2)MAINTAINER :MAINTAINER 指令 指定了當(dāng)前鏡像的作者及聯(lián)系方式幢哨。e.g : MAINTAINER: caiqiufang
3)RUN : RUN 指令可以在當(dāng)前鏡像上執(zhí)行Linux 命令并形成一個新的層赡勘,RUN 是編譯時(build) 的動作,在docker 命令中運行的shell 命令,等價于docker run <image> <command> 示例可以是如下兩種,CMD 和 ENTRYPOINT也是如此 e.g : RUN /bin/bash -c "echo helloworld" or RUN {"/bin/bash", "-c" ,"echo helloworld"}
4)CMD : CMD 指令指明了啟動鏡像容器時的默認行為(docker 容器運行時的默認命令)捞镰,一個Dockerfile 里只有一個CMD 指令闸与,CMD 指令里設(shè)定的命令可以在運行鏡像時使用參數(shù)覆蓋,CMD 是 運行時(run)的動作岸售。 e.g : CMD echo "this is a test" 正如上所說可以被運行時的參數(shù)覆蓋践樱,如下: docker run -d imag_name echo "this is not a test"。
5)EXPOSE : 指明了鏡像運行時的容器必須監(jiān)聽的端口 e.g : EXPOSE 8080
6) ENV : 用來設(shè)置環(huán)境變量 e.g : ENV myname = caiqiufang or ENV myname caiqiufang凸丸。
7)ADD : ADD 指令是指從當(dāng)前工作目錄復(fù)制文件到鏡像目錄中去拷邢。 e.g : ADD test.txt /mydir/
8) ENTRYPOINT : ENTRYPOINT 指令可以讓容器像一個可執(zhí)行程序一樣運行,這樣鏡像運行時可以像軟件一樣 接收參數(shù)執(zhí)行屎慢。ENTRYPOINT 是運行(run)時的動作 e.g : ENTRYPOINT {"/bin/echo"} ,那么我們可以向鏡像傳遞參數(shù)運行 docker run -d image_name "this is a test"
9) WORKDIR <path>: 指定RUN, CMD, ENTRYPOINT 等命令運行的工作路徑
8.2 使用腳本創(chuàng)建鏡像
sudo docker pull centos:centos7
sudo cd /usr/local/src
sudo tar zxf jdk-8u201-linux-x64.tar.gz
sudo ls
jdk1.8.0_201 jdk-8u201-linux-x64.tar.gz
sudo mkdir /usr/local/jdk
sudo cd /usr/local/jdk
sudo cp ../src/jdk-8u201-linux-x64.tar.gz ./
sudo ls
jdk-8u201-linux-x64.tar.gz
sudo vi Dockerfile
FROM centos:centos7
MAINTAINER tom
RUN mkdir /usr/local/jdk
WORKDIR /usr/local/jdk
ADD jdk-8u201-linux-x64.tar.gz /usr/local/jdk
ENV JAVA_HOME /usr/local/jdk/jdk1.8.0_201
ENV JRE_HOME /usr/local/jdk/jdk1.8.0_201/jre
ENV PATH $JAVA_HOME/bin:$PATH
sudo docker build -t jdk1.8 .
8.3 Docker私有倉庫
https://www.cnblogs.com/naixin007/p/10952813.html
(1)拉取私有倉庫鏡像
docker pull registry
(2)啟動私有倉庫
docker run -di --name=registry -p 5000:5000 registry
(3)打開瀏覽器輸入:http://192.168.133.10:5000/v2/_catalog看到{"repositories":[]}表示私有倉庫搭建成功瞭稼,并且為空
(4)修改daemon.json
vi /etc/docker/daemon.json
添加以下內(nèi)容,保存退出,此步用于讓docker信任私有倉庫
{"insecure-registries":["192.168.133.10:5000"]}
(5)重啟docker服務(wù)
systemctl restart docker
8.4 Docker私有倉庫鏡像上傳
(1)給鏡像打標簽
docker tag jdk1.8 192.168.133.10:5000/jdk1.8
(2)上傳鏡像
docker push jdk1.8 192.168.133.10:5000/jdk1.8